螺旋矩阵 ||

原题:

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

示例 1: 59. 螺旋矩阵 || - 图1

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

示例 2:

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

提示:

  • 1 <= n <= 20

解题方法:

解法一:

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> res(n, vector<int>(n));
        const int size = n * n;
        int i = 0, j = 0, k = 1;
        int left = 0, right = n - 1, up = 0, down = n - 1;
        while (k <= n * n)
        {
            for (i = left; i <= right; i++)   //1.遍历上方横排,遍历完之后,上方边界+1
            {
                res[j][i] = k;
                k++;
            }
            i--;
            up++;

            for (j = up; j <= down; j++)      //2.遍历右方横排,遍历完之后,右方边界-1
            {
                res[j][i] = k;
                k++;
            }
            j--;
            right--;


            for (i = right; i >= left; i--)   //3.遍历下方横排,遍历完之后,下方边界-1
            {
                res[j][i] = k;
                k++;
            }
            i++;
            down--;


            for (j = down; j >= up; j--)      //4.遍历左方横排,遍历完之后,左方边界+1
            {
                res[j][i] = k;
                k++;
            }
            j++;
            left++;
        }
        return res;
    }
};

做题小结:

针对解法一:

  1. 参考54. 螺旋矩阵,使用同样的绕圈方法对初始生成的res二维数据进行一一赋值
  2. 需要注意res的声明方式,声明一个二维数组,则声明他的行数,以及它的内容,它的内容又为一个以列数为大小的数组
  3. 本题比54还要简单一点,因为是规整的n*n矩阵