题目地址:https://leetcode.com/problems/spiral-matrix/description/
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].
与Spiral Matrix II基本一个意思,控制好方向和边界,按照顺序去读取就行了。
import java.util.ArrayList;
import java.util.List;
public class SpiralMatrix {
public static List<Integer> spiralOrder(int[][] matrix) {
List<Integer> result = new ArrayList<Integer>();
if (matrix == null || matrix.length == 0)
return result;
int k = 1;
int rowLen = matrix.length;
int colLen = matrix[0].length;
int sqrN = rowLen * colLen;
boolean goLeft = true;
boolean goDown = false;
boolean goRight = false;
boolean goUp = false;
int i = 0;
int j = 0;
int rowBlock = colLen - 1;
int colBlock = rowLen - 1;
while (k <= sqrN) {
if (goLeft) {
if (j < rowBlock) {
result.add(matrix[i][j]);
j++;
} else if (j == rowBlock) {
result.add(matrix[i][j]);
goLeft = false;
goDown = true;
i++;
}
} else if (goDown) {
if (i < colBlock) {
result.add(matrix[i][j]);
i++;
} else if (i == colBlock) {
result.add(matrix[i][j]);
goDown = false;
goRight = true;
j--;
}
} else if (goRight) {
if (j > colLen - 1 - rowBlock) {
result.add(matrix[i][j]);
j--;
} else if (j == colLen - 1 - rowBlock) {
result.add(matrix[i][j]);
goRight = false;
goUp = true;
rowBlock--;
colBlock--;
i--;
}
} else if (goUp) {
if (i > rowLen - 1 - colBlock) {
result.add(matrix[i][j]);
i--;
} else if (i == rowLen - 1 - colBlock) {
result.add(matrix[i][j]);
goUp = false;
goLeft = true;
j++;
}
}
k++;
}
return result;
}
public static void main(String[] args) {
int[][] matrix = new int[][] {{1, 2, 3, 10}, {4, 5, 6, 11}, {7, 8, 9, 12}};
System.out.println(spiralOrder(matrix));
}
}