#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>>r;
r.resize(n);
for(int i=0;i<n;i++){
vector<int> s;
s.resize(n);
for (int j=0;j<n;j++){
s[j]=0;
}
r[i] = s;
}
int x1 = 0;
int y1 = 0;
int x2 = n-1;
int y2 = n-1;
int d = 0;
write(r,x1,y1,x2,y2,0,1);
return r;
}
void write(vector<vector<int>> &r,int x1,int y1,int x2,int y2,int d,int k){
if(x1>x2||y1>y2){
return ;
}
if(d==0){
for(int i=x1;i<=x2;i++){
r[y1][i] = k;
k++;
}
write(r,x1,++y1,x2,y2,(d+1)%4,k);
}else if(d==1){
for(int i=y1;i<=y2;i++){
r[i][x2] = k;
k++;
}
write(r,x1,y1,--x2,y2,(d+1)%4,k);
}else if(d==2){
for(int i=x2;i>=x1;i--){
r[y2][i] = k;
k++;
}
write(r,x1,y1,x2,--y2,(d+1)%4,k);
}else if(d==3){
for(int i=y2;i>=y1;i--){
r[i][x1] = k;
k++;
}
write(r,++x1,y1,x2,y2,(d+1)%4,k);
}
}
};
void print(vector<vector<int>> &r){
int n = r.size();
int m = r[0].size();
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
std::cout<<r[i][j]<<" ";
}
std::cout<<std::endl;
}
}
int main(){
Solution s;
vector<vector<int>> r;
r = s.generateMatrix(4);
print(r);
return 0;
}
链接:https://leetcode-cn.com/explore/interview/card/tencent/221/array-and-strings/913/