力扣59题-螺旋矩阵-题解
题目描述
给你一个正整数 n ,生成一个包含 1 到 n^2^ 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:

1 2
| 输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]
|
示例 2:
提示:
分析
破解本题的关键在于设计四个变量,分别表示矩阵的上、下、左、右, 四个动态更新的边界.
num从1开始,通过从左到右、从上到下、从右到左、从下到上的顺序不断循环填入num,同时更新边界,直到num>n^2^。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| #include <iostream> #include <vector> using namespace std; class Solution { public: vector<vector<int>> generateMatrix(int n) { int top = 0; int bottom = n - 1; int left = 0; int right = n - 1; int num = 1; vector<vector<int>> matrix(n, vector<int>(n, 0)); while (num <= n * n) { for (int i = left; i <= right; i++) { matrix[top][i] = num; num++; } top++; for (int i = top; i <= bottom; i++) { matrix[i][right] = num; num++; } right--; for (int i = right; i >= left; i--) { matrix[bottom][i] = num; num++; } bottom--; for (int i = bottom; i >= top; i--) { matrix[i][left] = num; num++; } left++; } return matrix; } }; int main() { int n; scanf("%d", &n); Solution s; vector<vector<int>> matrix= s.generateMatrix(n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { printf("%d\t", matrix[i][j]); } printf("\n"); } }
|