🔩

螺旋矩阵

题目: 螺旋矩阵
  • 难点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;
}
 
你觉得这篇文章怎么样?
YYDS
比心
加油
菜狗
views

Loading Comments...