数组题——螺旋矩阵Ⅱ

螺旋矩阵Ⅱ

先修知识点

vector变量的初始化:

  1. vector<int> a(10) ; //声明一个初始大小为10的向量。一维向量
  2. vector<int> a(10, 1) ; //声明一个初始大小为10且初始值都为1的向量 。一维向量
  3. vector<vector<int>> b(10, vector<int>(5)); //创建一个10*5的int型二维向量
  4. 向量元素的位置也是一种数据类型, 在向量中遍历器的类型为: vector<int>::iterator

问题描述

给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。如:若矩阵为3x3方阵,那么返回:

[ [ 1, 2, 3 ],

  [ 8, 9, 4 ],

  [ 7, 6, 5 ] ]

解题思路

按照螺旋顺序写矩阵,规定a,b为行坐标(a为起始,b为终止);c、d为纵坐标(c为起始,d为终止)

首先写第一行(坐标为[a][i]):位置从c—d;然后是最后一排(坐标为[i][d]):位置从a+1—b;之后是最下面一行(坐标为[b][i]):位置从d-1—c;最后是第一列(坐标是[c][i]):位置从b-1—a+1。在最后一列算完开始算下一圈的时候,c是从c+1开始的,因此需要添加c++。

第二轮是在第一轮的基础上进行的,因此进行循环。

第一行之后,行的开始a++

最后一列之后,列的终结d--;

最后一行之后,行的终结b--

第一列之后,列的开始c++

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) 
    {
        vector<vector<int>> M(n,vector<int>(n,0));
        int num=1;
        int a=0,b=n-1,c=0,d=n-1;
        while(num<=n*n)
        {
            for(int i=c;i<=d;i++)
            {
                M[a][i]=num;
                num++;
            }
            a++;
            for(int i=a;i<=b;i++)
            {
                M[i][d]=num;
                num++;
            }
            d--;
            for(int i=d;i>=c;i--)
            {
                M[b][i]=num;
                num++;
            }
            b--;
            for(int i=b;i>=a;i--)
            {
                M[i][c]=num;
                num++;
            }
            c++;
        }
        return M;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值