【leetcode】袁厨每日精选题详解之老铁,你这个螺旋给我绕晕了。

  嗨,大家好,我是袁厨(因为酷爱做饭,所以自己考取了厨师证)。之前一直看大家写的博客,学到了很多东西。然后最近萌生了自己写的想法,将自己知道的分享给需要的同学。以后每天会为大家分享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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

猜你喜欢

转载自blog.csdn.net/tan45du_yuan/article/details/109137770