螺旋矩阵

题目

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

示例 1:
leetcode图片

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

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

思路

1.注意边界条件

这个题目主要考察的是你条件很多的时候怎么把握这些条件,怎么注意这些边界:循环次数,循环边界,有何规律
请看代码的注释,看有哪些边界条件

代码

1.暴力方法

#include<iostream>
#include<vector>
using namespace std;


class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> result(n,vector<int>(n));//二维vector数组的初始化
        int startx=0;
        int starty=0;  //记录每一圈开始的位置
        int loop = n/2;         //循环圈数
        int count = 1;          //表示每一个赋值给该位置的数字
        int i,j;                //i,j分别用来表示实际上转圈的时候走到哪个坐标

        int lengh = 1;          //用来记录边长(也就是每一次循环的数量)


        while(loop--){
            i=startx;
            j=starty;
            //第lengh次的循环第一条边
            for(;j< n-lengh;j++){
                result[startx][j] = count++;
            }
            //第lengh次的循环第二条边
            for(;i<n-lengh;i++){
                result[i][j] = count++;
            }
            //第lengh次的循环第三条边
            for(;j>starty;j--){
                result[i][j] = count++;
            }
            //第lengh次的循环第四条边
            for(;i>startx;i--){
                result[i][j] = count++;
            }

            startx++;
            starty++;
            lengh++;
        }
        //n要是奇数的话补充中间的元素
        if(n%2){
            result[n/2][n/2] = count;
        }
        return result;
    }
};


int main(int argc, char const *argv[])
{
    Solution so;
    vector<vector<int>>a;
    a=so.generateMatrix(3);
    for(int i = 0;i<a.size();i++)
    {
        for(int j = 0;j<a[0].size();j++){
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
    system("pause");
    return 0;
}


posted @ 2023-02-24 13:24  铜锣湾陈昊男  阅读(7)  评论(0)    收藏  举报