【LeetCode】59.螺旋矩阵 II (C++语言)

螺旋矩阵着实花了点时间,想了好久才想明白,希望给小伙伴们带来点思路,觉得还不错得小伙伴可以点个赞哦~

题目描述

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

示例 1:

img

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

思路

螺旋矩阵解法是将矩阵分为四个块填入,如上图就是将1,2为一个模块,3,4为一个模块,5,6一个模块,7,8一个模块,四个模块即为一圈。主要就是一个循环停止的判断问题。

我们多分析几个矩阵可以找到如下规律

假设正整数为n,此时为第k圈

1.圈开始的横纵坐标为(k-1,k-1)

2.圈中每个模块的长度,即数字个数为n-k

3.将矩阵填完需运行n/2圈

4.如果n是奇数则矩阵中心元素[n/2][n/2为n^2

接下来就是代码啦

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> circle(n,vector<int>(n,0));
     int loop=n/2;            //圈数
     int x=0;               //初始横坐标
     int y=0;               //初始纵坐标
     int num=1;
     int i,j;
    for(int c =1;c<=loop;c++){           //第c圈

       i = x;
       j = y;  

      for(j = y ;j<=n-c-1;j++) {       //第一圈四分之一圈
         circle[i][j] = num;
         num++;
      }
       j = n - c;
      for( i= x ;i<=n-c-1;i++) {       //第一圈四分之二圈
          circle[i][j] = num;
          num++;
      }
      i = n - c;

      for(;j>y;j--) {                     //第一圈四分之四圈
          circle[i][j] = num;
          num++;
      }
       j =y;
      
      for(;i>x;i--) {                     //第一圈四分之三圈
          circle[i][j] = num;
          num++;
      }
      
     x++;     //初始横坐标变化
     y++;     //初始纵坐标变化
    }

    if(n%2) {
       circle[n/2][n/2] = num;
    }
     return circle;
    }
};

要注意循环条件是小于等于哦~

还有每次圈开始的横纵坐标都要变化
在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值