C++零基础算法100题 - 螺旋矩阵 II

96 阅读1分钟

题目链接: 59. 螺旋矩阵 II - 力扣(LeetCode)

题目描述

image.png

解题思路

  1. 我们得到一个正整数N,然后我们将创造一个二维数组
  2. 我们将1-N*N之间的所有数字都给他插入进入这个二维数组
  3. 首先我们到达第一层最末尾的时候,我们往下面走
  4. 当我们到达第一个最下面的时候,我们往左边走
  5. 到另外一个端点的时候,我们往上面走,这个过程我们会不断的发现边界进行缩小
  6. 如果说N为奇数情况的话。最后一个格子的数字需要我们手动填充
  7. 将这个二维数组返回回去

代码实现

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> res(n,vector<int>(n,0));
        int startX=0,startY=0;
        int loop=n/2;
        int mid=n/2;
        int count=1;
        int offset=1;
        int i,j;
        while(loop--){
            i=startX;
            j=startY;
            // 从左往右
            for(j=startY;j<n-offset;j++){
                res[startX][j]=count++;
            }
            // 从上到下
            for(i=startX;i<n-offset;i++){
                res[i][j]=count++;
            }
            // 从右往左
            for(;j>startY;j--){
                res[i][j]=count++;
            }
            // 从下到上
            for(;i>startX;i--){
                res[i][j]=count++;
            }
            startX++;
            startY++;
            offset++;
        }
        if(n%2){
            res[mid][mid]=count;
        }
        return res;
    }
};