描述
给你一个数n生成一个包含1-n^2的螺旋形矩阵
您在真实的面试中是否遇到过这个题? 是
样例
n = 3
矩阵为
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
给你一个数n生成一个包含1-n^2的螺旋形矩阵
您在真实的面试中是否遇到过这个题? 是
样例
n = 3
矩阵为
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
分析
该题目和旋转矩阵的思路差不多,只不过需要初始化矩阵,然后对每个位置进行存储,对每个位置+1,所以计算位置的数需要设置为全局变量。
程序
class Solution {
public:
/**
* @param n: An integer
* @return: a square matrix
*/
int counts = 1;
vector<vector<int>> generateMatrix(int n) {
// write your code here
vector<vector<int> > results(n, vector<int>(n, 0));
if (n == 0)
return results;
int left_x, left_y, right_x, right_y;
left_x = left_y = 0;
right_x = right_y = n - 1;
while (left_x <= right_x && left_y <= right_y){
generateMatrix(results, left_x++, left_y++, right_x--, right_y--);
}
return results;
}
void generateMatrix(vector<vector<int>> &results, int left_x, int left_y, int right_x, int right_y){
if (left_x == right_x){//在中心部分,赋值之后即可返回子函数
results[left_x][left_y] = counts;
return;
}
int cur_x = left_x;
int cur_y = left_y;
while (cur_x != right_x){
results[left_y][cur_x] = counts;
counts++;
cur_x++;
}
while (cur_y != right_y){
results[cur_y][right_x] = counts;
counts++;
cur_y++;
}
while (cur_x != left_x){
results[right_y][cur_x] = counts;
counts++;
cur_x--;
}
while (cur_y != left_y){
results[cur_y][left_x] = counts;
counts++;
cur_y--;
}
}
};