题目描述
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]

输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]
思路
- 设定四个边界;
- 总是按照右下左上的顺序遍历,每次改变一次方向的时候,改变对应border的值;
- 当leftBorder > rightBorder或者topBorder > bottomBorder的时候,越界了,说明要停止了。
代码
class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> result = new ArrayList<>();int leftBorder = 0;int rightBorder = matrix[0].length - 1;int topBorder = 0;int bottomBorder = matrix.length - 1;while (true) {// 从左往右遍历,变化的是列,列的初始值为左borderfor (int col = leftBorder; col <= rightBorder; col++) {// 添加的时候,topBorder是不变的,变化的是列。result.add(matrix[topBorder][col]);}// 遍历结束后,topBorder要+1,相当于最上边一行不要了。if (++topBorder > bottomBorder) {break;}// 下面逻辑同理,只需要注意变化的是行还是列for (int row = topBorder; row <= bottomBorder; row++) {result.add(matrix[row][rightBorder]);}if (--rightBorder < leftBorder) {break;}for (int col = rightBorder; col >= leftBorder; col--) {result.add(matrix[bottomBorder][col]);}if (--bottomBorder < topBorder) {break;}for (int row = bottomBorder; row >= topBorder; row--) {result.add(matrix[row][leftBorder]);}if (++leftBorder > rightBorder) {break;}}return result;}}
