题目: 螺旋矩阵
- 难点1:设置辅助的转向二维数组
- 难点2: 提前计算下一步,用于转向验证后,再重新计算实际应该走的下一步
static constexpr int direction[4][2] = {{0,1}, {1,0}, {0, -1}, {-1,0}};
vector<int> spiralOrder(vector<vector<int>>& matrix) {
if (matrix.size() == 0 || matrix[0].size() == 0) return {};
int m = matrix.size();
int n = matrix[0].size();
int size = m*n;
vector<vector<bool>> visited(m, vector<bool>(n, false));
vector<int> ans;
int i = 0;
int j = 0;
int k = 0;
for (int num = 0; num < size; num++ ) {
ans.push_back(matrix[i][j]);
visited[i][j] = true;
int ni = i + direction[k][0]; // next_i
int nj = j + direction[k][1]; // next_j
if (ni<0 || ni>=m || nj<0 || nj>=n || visited[ni][nj]) {
k = (k+1) % 4;
}
// 经过转向后重新计算下一步的位置
i = i + direction[k][0];
j = j + direction[k][1];
}
return ans;
}





Loading Comments...