刷的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); }