classSolution { public: vector<int> spiralOrder(vector<vector<int>>& matrix){ if (matrix.empty()) return {}; int m = matrix.size(), n = matrix[0].size(); vector<int> ans; // 规定好上下左右界 int up = 0, down = m - 1, left = 0, right = n - 1; // 开始剥层 while (true) { for (int i = left; i <= right; i++) ans.push_back(matrix[up][i]); up++; if (up > down) break; for (int i = up; i <= down; i++) ans.push_back(matrix[i][right]); right--; if (left > right) break; for (int i = right; i >= left; i--) ans.push_back(matrix[down][i]); down--; if (up > down) break; for (int i = down; i >= up; i--) ans.push_back(matrix[i][left]); left++; if (left > right) break; } return ans; } };
📊 复杂度分析
1、模拟
时间复杂度:O(mn),其中 m 和 n 分别是输入矩阵的行数和列数。矩阵中的每个元素都要被访问一次。