LeetCode(54)(59) Spiral Matrix I II
来源:互联网 发布:cr1000程序编程的书籍 编辑:程序博客网 时间:2024/05/16 19:33
一开始我是整体思考如何打印一个环,后来继续参考这篇文章,发现可以将顺时针打印一个环分解成打印上,结束,打印右,结束,打印下,结束,打印左,结束。这些操作的分解的基础基于一个事实:每个环的开头都是matrix[cycleNumber][cycleNumber]所以在打印“右”的时候不必再考虑“上”,减少动作之间的耦合可以使得思考更加容易。
Spiral Matrix I 代码如下:
class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> result; if(0 == matrix.size()) return result; int width = matrix[0].size(); int height = matrix.size(); int cycle = (min(width, height) + 1) / 2; for(int cycleNumber = 0; cycleNumber < cycle; cycleNumber++) { for(int column = cycleNumber; column - cycleNumber < width; column++) result.push_back(matrix[cycleNumber][column]); for(int row = cycleNumber + 1; row - cycleNumber < height; row++) result.push_back(matrix[row][cycleNumber + width - 1]); if(1 == width || 1 == height) break; for(int column = cycleNumber + width - 2; column - cycleNumber >= 0; column--) result.push_back(matrix[cycleNumber + height - 1][column]); for(int row = cycleNumber + height - 2; row - cycleNumber >= 1; row--) result.push_back(matrix[row][cycleNumber]); width = width - 2; height = height - 2; } return result; }};
Spiral Matrix II 代码如下
class Solution {public: vector<vector<int>> generateMatrix(int n) { vector<vector<int> > matrix(n, vector<int>(n)); int width = n; int height = n; int counter = 1; for(int cycleNumber = 0; cycleNumber < (n + 1) / 2; cycleNumber++) { for(int column = cycleNumber; column - cycleNumber < width; column++) matrix[cycleNumber][column] = counter++; for(int row = cycleNumber + 1; row - cycleNumber < height; row++) matrix[row][cycleNumber + width - 1] = counter++; for(int column = cycleNumber + width - 2; column - cycleNumber >= 0; column--) matrix[cycleNumber + height - 1][column] = counter++; for(int row = cycleNumber + height - 2; row - cycleNumber > 0; row--) matrix[row][cycleNumber] = counter++; width = width - 2; height = height - 2; } return matrix; }};
参考JustDoIT
0 0
- LeetCode(54)(59) Spiral Matrix I II
- LeetCode 54/59. Spiral Matrix i, ii
- <LeetCode OJ> 54 / 59 Spiral Matrix( I / II )
- [LeetCode]Spiral Matrix I & II & Rotate Matrix
- LeetCode.54(59) Spiral Matrix && II
- LeetCode题解:Spiral Matrix I and II
- [LeetCode]-Spiral Matrix I&II 螺旋矩阵
- LeetCode - Spiral Matrix I && II - Frequent
- LeetCode 59: Spiral Matrix II
- [leetcode 59] Spiral Matrix II
- [LeetCode 59] Spiral Matrix II
- leetcode || 59、 Spiral Matrix II
- Spiral Matrix II - LeetCode 59
- Leetcode #59 Spiral Matrix II
- leetcode 59: Spiral Matrix II
- Leetcode#59||Spiral Matrix II
- leetcode 59:Spiral Matrix II
- 【LEETCODE】59-Spiral Matrix II
- UVA 201 Squares
- 不使用第三个参数使a,b两个参数的值互换。
- cast from 'void *' to 'int' loses precision
- 树莓派的供电问题
- ROS 学习系列 -- Roomba, Xtion Pro机器人制作地图在Android手机无法实时观测地图
- LeetCode(54)(59) Spiral Matrix I II
- 已知中序遍历序列和后序遍历序列,求先序遍历
- 我的嵌入式学习之旅——起航篇
- 一起talk C栗子吧(第二十四回:C语言实例--顺序查找)
- 先论lowbit
- J2EE基础EJB
- 岩手中文离线地图App上线
- java.lang.ClassCastException: java.lang.String cannot be cast to com.qbz.entity.TblUser
- Scala详解---------类