题目
题解
对于矩阵数组的操作
- 找规律
- 模拟
代码
// //遍历1-n*n
// class Solution {
// public:
// vector<vector<int>> generateMatrix(int n) {
// int curNum = 1;
// vector<vector<int>> matrix(n, vector<int>(n));
// int row = 0, column = 0;
// vector<vector<int>> directions = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; //螺旋的方向按照:右下左上
// int directionIndex = 0;//先往右,到头往下
// while (curNum <= n * n) {
// matrix[row][column] = curNum;
// curNum++;
// //先对下个存储坐标进行预判
// int nextRow = row + directions[directionIndex][0];
// int nextColumn = column + directions[directionIndex][1];
// if (nextRow < 0 || nextRow >= n || nextColumn < 0 || nextColumn >= n || matrix[nextRow][nextColumn] != 0) {
// directionIndex = (directionIndex + 1) % 4;
// // 顺时针旋转至下一个方向
// }
// row = row + directions[directionIndex][0];
// column = column + directions[directionIndex][1];
// }
// return matrix;
// }
// };
//将数组看做层层递进的
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
int num = 1;
vector<vector<int>> matrix(n, vector<int>(n));
//对于每层固定起点
int left = 0, right = n - 1, top = 0, bottom = n - 1;
while (left <= right && top <= bottom) {
for (int column = left; column <= right; column++) {
matrix[top][column] = num;
num++;
}
for (int row = top + 1; row <= bottom; row++) {
matrix[row][right] = num;
num++;
}
//if (left < right && top < bottom) {
for (int column = right - 1; column > left; column--) {
matrix[bottom][column] = num;
num++;
}
for (int row = bottom; row > top; row--) {
matrix[row][left] = num;
num++;
}
//}
left++;
right--;
top++;
bottom--;
}
return matrix;
}
};