【力扣hot100】【Leetcode 54】螺旋矩阵|边界控制 算法笔记及打卡(19/100)
【力扣】【Leetcode 54】螺旋矩阵边界控制给你一个m行n列的矩阵matrix请按照顺时针螺旋顺序返回矩阵中的所有元素。示例 1输入matrix [[1,2,3],[4,5,6],[7,8,9]] 输出[1,2,3,6,9,8,7,4,5]示例 2输入matrix [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出[1,2,3,4,8,12,11,10,9,5,6,7]提示m matrix.lengthn matrix[i].length1 m, n 10-100 matrix[i][j] 100参考解答class Solution { public: vectorint spiralOrder(vectorvectorint matrix) { vectorint ans; if (matrix.empty()) return ans; int m matrix.size(), n matrix[0].size(); int top 0, bottom m - 1; //上下边界 int left 0, right n - 1; //左右边界 while (true) { // 左 → 右 for (int i left; i right; i) ans.push_back(matrix[top][i]); if (top bottom) break; //等效于top; if (top bottom) break; // 上 → 下 for (int i top; i bottom; i) ans.push_back(matrix[i][right]); if (--right left) break; // 右 → 左 for (int i right; i left; --i) ans.push_back(matrix[bottom][i]); if (--bottom top) break; // 下 → 上 for (int i bottom; i top; --i) ans.push_back(matrix[i][left]); if (left right) break; } return ans; } };完整解法由LLM辅助生成#include iostream #include vector using namespace std; int main() { int m, n; cin m n; vectorvectorint matrix(m, vectorint(n)); // 输入矩阵 for (int i 0; i m; i) { for (int j 0; j n; j) { cin matrix[i][j]; } } vectorint ans; // 四个边界 int top 0; int bottom m - 1; int left 0; int right n - 1; while (true) { // 1. 左 → 右 for (int i left; i right; i) ans.push_back(matrix[top][i]); top; if (top bottom) break; // 2. 上 → 下 for (int i top; i bottom; i) ans.push_back(matrix[i][right]); right--; if (left right) break; // 3. 右 → 左 for (int i right; i left; i--) ans.push_back(matrix[bottom][i]); bottom--; if (top bottom) break; // 4. 下 → 上 for (int i bottom; i top; i--) ans.push_back(matrix[i][left]); left; if (left right) break; } // 输出结果 for (int x : ans) cout x ; cout endl; return 0; }