嗨,大家好,我是袁厨(因为酷爱做饭,所以自己考取了厨师证)。之前一直看大家写的博客,学到了很多东西。然后最近萌生了自己写的想法,将自己知道的分享给需要的同学。以后每天会为大家分享leetcode精选题目的各种题解,并且每周会整理一下该周刷的所有题目,及解题框架。大家微信搜索【程序员爱做饭】关注我吧!
题目描述
顺时针遍历
做题思路
其实这个题目还算是比较容易,但是因为可能处理不好边界情况,所以还是需要细心思考,这个题目我师兄面试的时候就遇到了,所以很有学习价值。主要思想就是通过顺时针进行一层一层的进行遍历,然后最后在上方和左方处理边界情况,然后就实现了螺旋遍历。
箭头代表遍历顺序,长度代表元素个数。总的思想就是这样的。
题目代码
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> list = new ArrayList<>();
//防止出现空的情况,先将其排除
if(matrix.length==0||matrix==null||matrix[0].length==0){
return list;
}
//得出数组的长和宽
int len = matrix.length;
int widlen = matrix[0].length;
//最小的那个加一除以2,则为最小 遍历次序
for(int i=0;i<(Math.min(len,widlen)+1)/2;i++){
//第一条边遍历情况
for(int j =i;j<widlen-i;j++){
list.add(matrix[i][j]);
}
//第二条边遍历情况
for(int j=i+1;j<len-i;j++){
list.add(matrix[j][widlen-i-1]);
}
//第三条遍历情况
for(int j = widlen-i-2;j>=i;j--){
//防止出现重复遍历的情况
if(list.size()==len*widlen){
break;
}
list.add(matrix[len-i-1][j]);
}
//第四条遍历情况
for(int j = len - i-2;j>i;j--){
//防止出现重复遍历的情况
if(list.size()==len*widlen){
break;
}
list.add(matrix[j][i]);
}
}
return list;
}
}
总结
学会这个题目可以直接解决两道题,螺旋插入的题目同样也可以解决。
更多题目总结请扫描下面二维码,一块刷题呀。
作者:LeetCode
链接:https://leetcode-cn.com/problems/rotate-array/solution/xuan-zhuan-shu-zu-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。