leetcode-59:螺旋矩阵 II

简介: leetcode-59:螺旋矩阵 II

题目

题目链接

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

示例 1:

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:

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

解题

方法一:生成矩阵然后按遍历(模拟)

LC 螺旋矩阵用类似的方法,此题只不过生成矩阵是提前生成好矩阵,然后去遍历它。

python解法

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        matrix = [[0]*n for _ in range(n)]
        cur_d = 0
        dirs = [(0,1),(1,0),(0,-1),(-1,0)]
        x,y = 0,0
        left,right,up,down = 0,n-1,0,n-1
        num = 1#记录数量和写入矩阵的数
        while num<=n*n:
            matrix[x][y]=num
            num+=1
            if cur_d==0 and y==right:
                cur_d+=1
                up+=1
            elif cur_d==1 and x==down:
                cur_d+=1
                right-=1
            elif cur_d==2 and y==left:
                cur_d+=1
                down-=1
            elif cur_d==3 and x==up:
                cur_d+=1
                left+=1
            cur_d%=4
            x += dirs[cur_d][0]
            y += dirs[cur_d][1]
        return matrix

c++解法

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> matrix(n,vector<int>(n));
        vector<vector<int>> dirs={{0,1},{1,0},{0,-1},{-1,0}};
        int left=0,right=n-1,top=0,down=n-1;
        int cur_d=0;
        int x=0,y=0;
        for(int i=1;i<n*n+1;i++){
            matrix[x][y]=i;
            if(cur_d==0&&y==right){
                top++;
                cur_d++;
            }
            else if(cur_d==1&&x==down){
                right--;
                cur_d++;
            }
            else if(cur_d==2&&y==left){
                down--;
                cur_d++;
            }
            else if(cur_d==3&&x==top){
                left++;
                cur_d++;
            }
            cur_d%=4;
            x+=dirs[cur_d][0];
            y+=dirs[cur_d][1];
        }
        return matrix;
    }
};

java解法

class Solution {
    public int[][] generateMatrix(int n) {
        int[][] matrix=new int[n][n];
        int[][] dirs={{0,1},{1,0},{0,-1},{-1,0}};
        int curdir=0;
        int top=0,down=n-1,left=0,right=n-1;
        int x=0,y=0;
        for(int i=0;i<n*n;i++){
            matrix[x][y]=i+1;
            if(curdir==0&&y==right){
                top++;
                curdir++;
            }else if(curdir==1&&x==down){
                right--;
                curdir++;
            }else if(curdir==2&&y==left){
                down--;
                curdir++;
            }else if(curdir==3&&x==top){
                left++;
                curdir++;
            }
            curdir%=4;
            x+=dirs[curdir][0];
            y+=dirs[curdir][1];
        }
        return matrix;
    }
}


相关文章
【Leetcode -2181.合并零之间的节点- 2326.螺旋矩阵Ⅳ】
【Leetcode -2181.合并零之间的节点- 2326.螺旋矩阵Ⅳ】
77 0
|
2月前
|
C++
Leetcode第54题(螺旋矩阵)
这篇文章介绍了LeetCode第54题“螺旋矩阵”的解题思路和C++的实现代码,该题目要求按照顺时针螺旋顺序返回给定矩阵中的所有元素。
20 1
Leetcode第54题(螺旋矩阵)
|
2月前
【LeetCode 05】螺旋矩阵II总结
【LeetCode 05】螺旋矩阵II总结
22 0
|
4月前
|
算法
LeetCode第59题螺旋矩阵 II
LeetCode第59题"螺旋矩阵 II"的解题方法,通过模拟螺旋填充过程,一圈一圈从外到内按顺序填充数字,直到完成整个矩阵的构建。
LeetCode第59题螺旋矩阵 II
|
4月前
|
存储 算法
LeetCode第54题螺旋矩阵
LeetCode第54题"螺旋矩阵"的解题方法,通过模拟从外到内的螺旋遍历过程,并利用方向向量控制遍历方向的转换,有效输出矩阵的螺旋顺序。
LeetCode第54题螺旋矩阵
|
机器学习/深度学习 算法
代码随想录Day02 数组基础2 leetcode T977有序数组的平方, T209 长度最小的子数组,T59 螺旋矩阵II
代码随想录Day02 数组基础2 leetcode T977有序数组的平方, T209 长度最小的子数组,T59 螺旋矩阵II
59 0
|
6月前
leetcode54螺旋矩阵题解
leetcode54螺旋矩阵题解
33 2
|
6月前
|
算法 机器人 数据挖掘
LeetCode题目54:螺旋矩阵【python4种算法实现】
LeetCode题目54:螺旋矩阵【python4种算法实现】
|
6月前
|
存储 算法
力扣经典150题第三十五题:螺旋矩阵
力扣经典150题第三十五题:螺旋矩阵
23 0
|
7月前
leetcode-6111:螺旋矩阵 IV
leetcode-6111:螺旋矩阵 IV
45 0