题目:Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,Given n = 3
,
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
思路:
与上一题一样的思路,上次是取数,这次是赋值。
定义一个count变量即可。
四条线路法,定义up,right,down,left四个变量,先走最上面,再走最右边,再走最下面,再走最左边,条件结束标志为左等于右,上等于下。
代码:
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int> > matrix(n,vector<int>(n,0));
//vector<vector<bool> >dp(m+1,vector<bool>(n+1,false));
//int matrix[n][n];
vector<vector<int>> result;
if(n==0){
return result;
}
int left=0,right=n-1;
int up=0,down=n-1;
int count=0;
while(up<=down&&left<=right){
for(int i=left;i<=right;i++){
matrix[up][i]=++count;
//res.push_back(matrix[up][i]);
//matrix[up].push_back(++count);
}
for(int i=up+1;i<=down;i++){
matrix[i][right]=++count;
//res.push_back(matrix[i][right]);
}
if(up==down||left==right){
break;
}
for(int i=right-1;i>=left;i--){
matrix[down][i]=++count;
//res.push_back(matrix[down][i]);
}
for(int i=down-1;i>=up+1;i--){
matrix[i][left]=++count;
//res.push_back(matrix[i][left]);
}
up++;
right--;
down--;
left++;
}
return matrix;
}
};