力扣每日一题59:螺旋矩阵||

题目描述:

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

示例 1:

力扣每日一题59:螺旋矩阵||_第1张图片

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

示例 2:

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

提示:

  • 1 <= n <= 20

通过次数

361.6K

提交次数

503.1K

通过率

71.9%

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

示例 1:

力扣每日一题59:螺旋矩阵||_第2张图片

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

示例 2:

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

提示:

  • 1 <= n <= 20

通过次数

361.6K

提交次数

503.1K

通过率

71.9%

思路和题解:

与第54题一样的方法,也是从最外层到最里层的方法,第54题是矩阵生成序列,这个是序列生成矩阵。螺旋矩阵

代码:

class Solution {
public:
    vector> generateMatrix(int n) {
        vector> ans(n,vector(n,0));
        int up=0,down=n-1,right=n-1,left=0;
        int num=1;
        while(true)
        {
            for(int i=left;i<=right;i++)
            {
                ans[up][i]=num;
                num++;
            }
            if(++up>down) break;
            for(int i=up;i<=down;i++)
            {
                ans[i][right]=num;
                num++;
            }
            if(--right=left;i--)
            {
                ans[down][i]=num;
                num++;
            }
            if(--down=up;i--)
            {
                ans[i][left]=num;
                num++;
            }
            if(++left>right) break;
        }
        return ans;
    }
};

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