LeetCode刷题---螺旋矩阵

2024-01-02 18:38:44

在这里插入图片描述
解题思路:

大体上是从矩阵外圈一步一步向里面收缩,依次添加需要的元素,首先定义四个边界,即上界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<left,同理结束遍历。
第三步从right遍历到left,之后将down-1.如果down-1<up,则返回。
最后从down遍历到up,之后up+1,如果left+1>right,返回。
至此,外围循环结束,开始循环内部直至结束。

代码实现:

 public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> 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) break;

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

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

        return res;
    }

文章来源:https://blog.csdn.net/weixin_47109902/article/details/135346151
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。