思路:和昨天的一样,循环遍历即可。边界条件别弄错了,没看昨天代码今天修了好久BUG
多提一句,这里由于会知道矩阵大小,所以直接初始化就行了。免得使用Push_back一个个推,费时费力。
C++代码:
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> matrix(n,vector<int>(n));
int u = 0;
int r = n-1;
int d = n-1;
int l = 0;
int num = 1;//起始值
while(true){
for(int i=l;i<=r;i++){
matrix[u][i] = num++;
}
if(u++>=d)break;
for(int i=u;i<=d;i++){
matrix[i][r] = num++;
}
if(r--<=l)break;
for(int i=r;i>=l;i--){
matrix[d][i] = num++;
}
if(d--<=u)break;
for(int i=d;i>=u;i--){
matrix[i][l] = num++;
}
if(l++>=r)break;
}
return matrix;
}
};
int main(){
Solution solution;
vector<vector<int>> matrix = solution.generateMatrix(3);
for(int i=0;i<matrix.size();i++){
for(int j=0;j<matrix[0].size();j++){
cout<<matrix[i][j]<<" ";
}
cout<<endl;
}
}