描述
给你一个数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--; } } };