尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

leetcode 54螺旋矩阵

leetcode 54螺旋矩阵 class Solution { public: vectorint spiralOrder(vectorvectorint matrix) { int m matrix.size(); // m 行 int n matrix[0].size(); // n 列 int left 0; int right n - 1; int top 0; int bottom m - 1; vectorint ans; while(ans.size() m * n){ // 1. 上边从左往右 for(int i left; i right ans.size() m * n; i){ ans.push_back(matrix[top][i]); } top; // 2. 右边从上往下 for(int i top; i bottom ans.size() m * n; i){ ans.push_back(matrix[i][right]); } right--; // 3. 下边从右往左 for(int i right; i left ans.size() m * n; i--){ ans.push_back(matrix[bottom][i]); } bottom--; // 4. 左边从下往上 for(int i bottom; i top ans.size() m * n; i--){ ans.push_back(matrix[i][left]); } left; } return ans; } };这道题的核心思路就是用top、bottom、left、right四个边界一圈一圈地向里面缩。你可以直接记成这个顺序上从左往右 右从上往下 下从右往左 左从下往上每走完一条边就把对应边界往里面移动一次top; right--; bottom--; left;具体对应关系是上边matrix[top][i] → top 右边matrix[i][right] → right-- 下边matrix[bottom][i] → bottom-- 左边matrix[i][left] → left例如1 2 3 4 5 6 7 8 9遍历顺序就是1 → 2 → 3 ↓ 4 5 6 ↑ ↓ 7 ← 8 ← 9第一圈得到1 2 3 6 9 8 7 4然后四个边界都缩进去只剩5最终1 2 3 6 9 8 7 4 5你还要固定记住int m matrix.size(); // 行数 int n matrix[0].size(); // 列数所以m → 行 → top / bottom n → 列 → left / right而matrix[i][j]永远是matrix[行][列] i j最后代码中的ans.size() m * n是为了保证总共只加入m*n个元素避免最后只剩一行或一列时重复访问。你可以把整道题压缩成一句口诀上右下左绕一圈走完一边缩一边直到取满m*n个元素。
返回列表