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;
    }
}


相关文章
|
2天前
[leetcode] 四数之和 M
[leetcode] 四数之和 M
|
2天前
leetcode-54:螺旋矩阵
leetcode-54:螺旋矩阵
21 0
|
2天前
|
Java 测试技术 C++
leetcode-18:四数之和
leetcode-18:四数之和
26 0
|
2天前
|
Java
leetcode-53:最大子序和
leetcode-53:最大子序和
22 0
|
11月前
|
算法 安全 Swift
LeetCode - #54 螺旋矩阵
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
LeetCode - #54 螺旋矩阵
|
11月前
|
算法 安全 Swift
LeetCode - #59 螺旋矩阵 II
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
LeetCode - #59 螺旋矩阵 II
|
11月前
|
算法 安全 Swift
LeetCode - #18 四数之和
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
|
11月前
|
机器学习/深度学习 Java Python
leetcode:59.螺旋矩阵II
leetcode:59.螺旋矩阵II
52 0
|
11月前
leetcode:54.螺旋矩阵
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
35 0
|
11月前
leetcode:18.四数之和
这题和前面的一道三数之和类似,解题的思路都一样,这里直接选取两个基准就可以了,然后循环出所有的组合进行判断,如果正好相等那么就加入Set集合中。
41 0