概述
转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51416037
Subject
出处:https://leetcode.com/problems/spiral-matrix/
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
You should return [1,2,3,6,9,8,7,4,5].
Explain
螺旋遍历输出一个m x n的数组。方向是上、右、下、左,依次循环。
My Solution
/**
* @author jacksen
* @param matrix
* @return
*/
public static List<Integer> spiralOrder(int[][] matrix) {
List<Integer> result = new ArrayList<>();
int m = matrix.length;// rows
if (m == 0) {
return result;
}
int n = matrix[0].length;// columns
int topOffset = 0;
int rightOffset = 0;
int bottomOffset = 0;
int leftOffset = 0;
while (true) {
// top
for (int i = leftOffset; i < n - rightOffset; i++) {
result.add(matrix[topOffset][i]);
}
topOffset++;
if (topOffset + bottomOffset == m) {
break;
}
// right
for (int i = topOffset; i < m - bottomOffset; i++) {
result.add(matrix[i][n - 1 - rightOffset]);
}
rightOffset++;
if (leftOffset + rightOffset == n) {
break;
}
// bottom
for (int i = n - 1 - rightOffset; i >= leftOffset; i--) {
result.add(matrix[m - 1 - bottomOffset][i]);
}
bottomOffset++;
if (topOffset + bottomOffset == m) {
break;
}
// left
for (int i = m - 1 - bottomOffset; i >= topOffset; i--) {
result.add(matrix[i][leftOffset]);
}
leftOffset++;
if (leftOffset + rightOffset == n) {
break;
}
}
return result;
}
topOffset、rightOffset、bottomOffset、leftOffset 分别表示 →、 ↓、 ←、 ↑四个方向遍历的次数。
只要topOffset + bottomOffset = 数组的行数,或者leftOffset + rightOffset = 数组的列数 就表示遍历完整,break即可。
最后
以上就是炙热小鸽子为你收集整理的【LeetCode】54. Spiral Matrix 解题报告的全部内容,希望文章能够帮你解决【LeetCode】54. Spiral Matrix 解题报告所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复