59. 螺旋矩阵 II

做题思路:

  1,这种题一般我是先自己画一下n = 2, n = 3, n = 4, n = 5的图,然后根据图的规律来写

  2,虽然找到了规律,但是我觉得这道题还是考的是做题者对自己代码的操控能力.....

  3,最后,这道题的代码是单纯的我想到那就写到那的代码,就仅仅是将自己头中简单的思想具体化,所以看上去相当繁杂,可读性极差,哎但是能写出来就好了我,这种题最容易越写越陷入进去,很痛苦的

复制代码
 1 class Solution {
 2 public:
 3     vector<vector<int>> generateMatrix(int n) {
 4         vector<vector<int>>result (n, vector<int>(n, 0));
 5         int quan = n / 2;  //绕的圈数
 6         int step = n - 1;  //绕一条边的时候走的步数
 7         int num = 1;  //给数组轮流打印下num++
 8         int x = 0, y = 0; //初始
 9         while (quan--) {
10             for (int k = 1; k <= step; k++) {   //第一条边
11                 result[x][y] = num;
12                 y++;
13                 num++;
14             }
15             for (int k = 1; k <= step; k++) {   //第二条边
16                 result[x][y] = num;
17                 num++;
18                 x++;
19             }
20             for (int k = 1; k <= step; k++) {   //第三条边
21                 result[x][y] = num;
22                 num++;
23                 y--;
24             }
25             for (int k = 1; k < step; k++) {    //第四条边,这里和上面有不同,主要是为了能让移动的坐标进入第二圈的初始位置
26                 result[x][y] = num;
27                 num++;
28                 x--;
29             }
30             result[x][y] = num;
31             num++;
32             y++;  //这里是调整到第二圈的初始位置
33             step -= 2;  //这里注意,每一圈后,每一条边的步数都会-2
34         }
35         if (n % 2 == 0)return result;
36         else {  //如果是奇数的n,则需要补一下中心的数
37             result[n / 2][n / 2] = num;
38             return result;
39         }
40     }
41 };
复制代码

 

posted @   北原春希  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示