剑指 Offer 29. 顺时针打印矩阵

这个题蛮有意思的。学习了大佬的思路。
注意边界情况,当输入空数组时,返回了一个匿名数组的写法。
以及保证数组不越界,及时退出循环的思路。
我原来写的while循环条件是(cnt<num),且没有写退出循环的四个判断,是有问题的。

class Solution {
   
    public int[] spiralOrder(int[][] matrix) {
        if(matrix.length==0) return new int[0];
        int l=0,r=matrix[0].length-1,u=0,d=matrix.length-1;
        int [] res=new int[matrix.length*matrix[0].length];
        int cnt=0;
        int num=matrix.length*matrix[0].length;
        while(true){
            for(int i=l;i<=r;i++)
                res[cnt++]=matrix[u][i];
            if(++u>d) break;

            for(int i=u;i<=d;i++)
                res[cnt++]=matrix[i][r];
            if(--r<l) break;

            for(int i=r;i>=l;i--)
               res[cnt++]=matrix[d][i];
            if(--d<u)break;
    
            for(int i=d;i>=u;i--)
               res[cnt++]=matrix[i][l];
            if(++l>r) break;
        }
         return res;
    }
}
posted @ 2021-03-18 10:14  wsshub  阅读(33)  评论(0)    收藏  举报