AC Leetcode 59. 螺旋矩阵 II

简介: AC Leetcode 59. 螺旋矩阵 II

[59. 螺旋矩阵 II
](https://leetcode.cn/problems/spiral-matrix-ii/)

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

示例 1:
在这里插入图片描述
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:

输入:n = 1
输出:[[1]]

提示:
1 <= n <= 20

解题思路

1.对于每层,从左上方开始以顺时针的顺序填入所有元素。假设当前层的左上角位于 (\textit{top}, \textit{left})(top,left),右下角位于 (\textit{bottom}, \textit{right})(bottom,right),按照如下顺序填入当前层的元素。
2.从左到右填入上侧元素,依次为 (\textit{top}, \textit{left})(top,left) 到 (\textit{top}, \textit{right})(top,right)。
3.从上到下填入右侧元素,依次为 (\textit{top} + 1, \textit{right})(top+1,right) 到 (\textit{bottom}, \textit{right})(bottom,right)。
4.如果 \textit{left} < \textit{right}left<right 且 \textit{top} < \textit{bottom}top<bottom,则从右到左填入下侧元素,依次为 (\textit{bottom}, \textit{right} - 1)(bottom,right−1) 到 (\textit{bottom}, \textit{left} + 1)(bottom,left+1),以及从下到上填入左侧元素,依次为 (\textit{bottom}, \textit{left})(bottom,left) 到 (\textit{top} + 1, \textit{left})(top+1,left)。
5.填完当前层的元素之后,将 \textit{left}left 和 \textit{top}top 分别增加 11,将 \textit{right}right 和 \textit{bottom}bottom 分别减少 11,进入下一层继续填入元素,直到填完所有元素为止。
在这里插入图片描述

class Solution {
    public int[][] generateMatrix(int n) {
        int[][] result = new int[n][n];
        int left = 0, right = n - 1, top = 0, bottom = n - 1;
        int i = 0, j = 0;
        int cur = 0;
        int max = (int) Math.pow(n, 2);

        while (cur <= max) {
            while (j <= right) {
                result[i][j++] = ++cur;
            }
            top++;
            j--;
            i = top;

            if (cur == max) {
                break;
            }
            while (i <= bottom) {
                result[i++][j] = ++cur;
            }
            i--;
            right--;
            j = right;
            if (cur == max) {
                break;
            }
            while (j >= left) {
                result[i][j--] = ++cur;
            }
            j++;
            bottom--;
            i = bottom;
            if (cur == max) {
                break;
            }
            while (i >= top) {
                result[i--][j] = ++cur;
            }
            i++;
            left++;
            j = left;
        }
        return result;
    }
}
目录
相关文章
|
7月前
【Leetcode -2181.合并零之间的节点- 2326.螺旋矩阵Ⅳ】
【Leetcode -2181.合并零之间的节点- 2326.螺旋矩阵Ⅳ】
44 0
|
7月前
|
机器学习/深度学习 算法
代码随想录Day02 数组基础2 leetcode T977有序数组的平方, T209 长度最小的子数组,T59 螺旋矩阵II
代码随想录Day02 数组基础2 leetcode T977有序数组的平方, T209 长度最小的子数组,T59 螺旋矩阵II
35 0
|
6月前
|
算法
代码随想录算法训练营第二天 | LeetCode 977.有序数组的平方、209.长度最小的子数组、59. 螺旋矩阵 II
代码随想录算法训练营第二天 | LeetCode 977.有序数组的平方、209.长度最小的子数组、59. 螺旋矩阵 II
41 0
YI
|
10月前
|
机器学习/深度学习 Go
LeetCode 0059.螺旋矩阵II【Go】
LeetCode 0059.螺旋矩阵II【Go】
YI
48 0
|
11月前
|
算法 安全 Swift
LeetCode - #59 螺旋矩阵 II
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
LeetCode - #59 螺旋矩阵 II
|
11月前
|
算法 安全 Swift
LeetCode - #54 螺旋矩阵
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
LeetCode - #54 螺旋矩阵
|
11月前
|
机器学习/深度学习 Java Python
leetcode:59.螺旋矩阵II
leetcode:59.螺旋矩阵II
52 0
|
11月前
leetcode:54.螺旋矩阵
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
36 0
|
12月前
|
机器学习/深度学习 算法 Java
【leetcode速通java版】02——有序数组、子数组、螺旋矩阵
【leetcode速通java版】02——有序数组、子数组、螺旋矩阵
|
算法
LeetCode每日1题--螺旋矩阵
LeetCode每日1题--螺旋矩阵
50 0
LeetCode每日1题--螺旋矩阵