螺旋矩阵问题

刷的leetcode中的题,其实之前写过一篇,不过当时的写法比较傻,遇见矩阵大一点的貌似就有问题。

这次再刷到一样的题目,就重新写了一下。

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
思路:
一圈一圈的递归走下去就好了。
然后每一圈都分为上下左右4个方向前进。
我们要做的,就是做好上下左右的操作
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
    void setValue(int point,int value,int size,vector<vector<int>>& v)
    {
        if(size<0)
        {
            return;
        }
        if(size==1)
        {
            v[point][point] = value;
            return;
        }
//        cout<<"point = "<<point<<" value = "<<value<<" size = "<<size<<endl;
        int total = 4*size-4;
        int array[4] = {};//对应上下左右中要计算的次数 
        array[0] = size;
        array[1] = 2*size - 2;//其实没有用到,直接简化成了2*size-2-size = size-2
        array[2] = 3*size - 2;
        array[3] = 4*size - 4;
        int nowindex = size;
        int y1 = point+size-1;
        for(int i=0;i<4;i++)
        {
            if(i==0)
            {
                for(int j=0;j<size;j++)//y不变,x++;
                {
                    nowindex = point + j;
                    v[point][nowindex] = value++;
                }
            }
            else if(i==1)
            {
                for(int j=0;j<size-2;j++)//x不变,y++ 
                {
                    nowindex = size + j;
                    v[point+1+j][y1] = value++;
                }
            }
            else if(i==2)
            {
                for(int j=0;j<size;j++)//y不变,x-- 
                {
                    v[y1][y1-j]=value++;
                }
            }
            else if(i==3)
            {
                for(int j=0;j<size-2;j++)//x不变,y-- 
                {
                    v[y1-1-j][point]=value++;
                }
            }
        }
        point++;
        size = size - 2;
        setValue(point,value,size,v);
    }
    vector<vector<int>> generateMatrix(int n) {
        vector<int> v1;
        vector<vector<int>> v;
        v1.resize(n);
        for(int i=0;i<n;i++)
        {
            v.push_back(v1);
        }
        setValue(0,1,n,v);
//        for(auto i:v)
//        {
//            for(auto j:i)
//            {
//                cout<<j<<" ";
//            }
//            cout<<endl;
//        }
        return v;
    }
};
int main()
{
    Solution s;
    s.generateMatrix(4);
} 
原文地址:https://www.cnblogs.com/dayq/p/15163913.html