美文网首页
剑指 Offer 29. 顺时针打印矩阵

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

作者: bangbang2 | 来源:发表于2020-07-08 19:16 被阅读0次
    image.png

    解题思路

    下图是打印的顺序


    image.png

    首先去定义上、下、左、右四个边界
    比如:在图中,打印1,2,3.
    起始位置是左边界,结束位置是右边界,在遍历结束后,上边界要向下收缩,同时要判断上边界是否大于下边界,如果大于,立刻结束
    while循环,直接返回数组
    以此为例,在其它三个边界继续遍历
    最后将数组返回

    代码

    class Solution {
        public int[] spiralOrder(int[][] matrix) {
            if(matrix.length==0) return new int[0];
            int x=0;
            int l=0;
            int r=matrix[0].length-1;
            int b=0;
            int u=matrix.length-1;
            int [] nums=new int[(r+1)*(u+1)];
            while(true){
                for(int i1=l;i1<=r;i1++){
                    nums[x++]=matrix[b][i1];
                }
                b++;
                if(b>u) break;
                for(int i2=b;i2<=u;i2++){
                    nums[x++]=matrix[i2][r];
                }
                r--;
                if(l>r) break;
                for(int i3=r;i3>=l;i3--){
                    nums[x++]=matrix[u][i3];
                }
                u--;
                if(b>u) break;
                for(int i=u;i>=b;i--){
                    nums[x]=matrix[i][l];
                    x++;
                }
                l++;
                if(l>r) break;
            }
            return nums;
        }
    }
    

    相关文章

      网友评论

          本文标题:剑指 Offer 29. 顺时针打印矩阵

          本文链接:https://www.haomeiwen.com/subject/yjkhcktx.html