算法:螺旋矩阵 I

问题

给定一个包含 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; } 

如果文章对你有帮助的话,不要忘记打上小编哟~

《算法:螺旋矩阵 I》

点赞