问题
给定一个包含 m x n 个要素的矩阵,(m 行, n 列),按照螺旋顺序,返回该矩阵中的所有要素。
样例
给定如下矩阵:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
应返回 [1,2,3,6,9,8,7,4,5]。
思路
思路比较普通,就是螺旋遍历。
实现
private static List<Integer> spiralOrder(int[][] matrix) {
// write your code here
if (matrix.length == 0 || matrix[0].length == 0) {
return null;
}
// 遍历当前行的首位置
int lineStart = 0;
// 遍历当前行的末位置
int lineEnd = matrix[0].length;
// 遍历当前列的首位置
int columnStart = 0;
// 遍历当前列的末位置
int columnEnd = matrix.length;
// 创建结果队列
List<Integer> list = new LinkedList<>();
// 遍历
int flag = 0;
while (list.size() < matrix.length * matrix[0].length) {
if (flag == 0) {
for (int i = lineStart; i < lineEnd; i++) {
list.add(matrix[columnStart][i]);
}
flag++;
columnStart++;
} else if (flag == 1) {
for (int i = columnStart; i < columnEnd; i++) {
list.add(matrix[i][lineEnd - 1]);
}
lineEnd--;
flag++;
} else if (flag == 2) {
for (int i = lineEnd; i > lineStart; i--) {
list.add(matrix[columnEnd - 1][i - 1]);
}
flag++;
columnEnd--;
} else if (flag == 3) {
for (int i = columnEnd; i > columnStart; i--) {
list.add(matrix[i - 1][lineStart]);
}
flag -= 3;
lineStart++;
}
}
return list;
}
如果文章对你有帮助的话,不要忘记打上小编哟~
网友评论