LeetCode刷题---螺旋矩阵

LeetCode刷题---螺旋矩阵_第1张图片
解题思路:

大体上是从矩阵外圈一步一步向里面收缩,依次添加需要的元素,首先定义四个边界,即上界up、下届down、左边界left、右边界right。up的索引为0,down的索引为二维数组的行数-1,左界left为0,右界为二维数组的列数-1。
第一步从left遍历到right,up此时为0,之后将上边界up+1,如果up+1>down,则证明上下界有交接,则遍历结束。
第二步从up遍历到down,此时right为数组列数-1,之后将right-1,如果right-1 第三步从right遍历到left,之后将down-1.如果down-1 最后从down遍历到up,之后up+1,如果left+1>right,返回。
至此,外围循环结束,开始循环内部直至结束。

代码实现:

 public List spiralOrder(int[][] matrix) {
        List res=new ArrayList<>();
        if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
            return res;
        }
        int m=matrix.length;//行数
        int n=matrix[0].length;//列数
        int up=0;//上边界
        int down=m-1;//下边界
        int left=0;//左边界
        int right=n-1;//右边界

        while(true)
        {
            for(int i=left;i<=right;i++)
            {
                res.add(matrix[up][i]);
            }
            if(++up>down) break;

            for(int i=up;i<=down;i++)
            {
                res.add(matrix[i][right]);
            }
            if(--right=left;i--)
            {
                res.add(matrix[down][i]);
            }
            if(--down=up;i--)
            {
                res.add(matrix[i][left]);
            }
            if(++left>right) break;
        }

        return res;
    }

你可能感兴趣的:(LeetCode刷题,leetcode,矩阵,算法)