题目地址:Spiral Matrix
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
Example 1:
Input:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
Output: [1,2,3,6,9,8,7,4,5]
Example 2:
Input:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
Output: [1,2,3,4,8,12,11,10,9,5,6,7]
import com.sun.tools.javac.util.ArrayUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class SpiralMatrix {
public static void main(String[] args) {
Integer[][] matrix = {{1, 2, 3,10}, {4, 5, 6,11}, {7, 8, 9,12},{13,14,15,16}};
List<Integer> res = spiralOrder(matrix);
System.out.println(res);
}
/**
* 1 2 3 10
* 4 5 6 11
* 7 8 9 12
* 13 14 15 16
*/
public static List<Integer> spiralOrder(Integer[][] matrix) {
int row = matrix.length;
double num = Math.ceil(new Double(row) / 2);
int column = matrix[0].length;
int i = 1, time = 0;
List<Integer> res = new ArrayList<Integer>();
while (time < num) {
int j = time;
while (j < column - time) {
res.add(matrix[time][j]);
j++;
}
while (i + time < row -1- time) {
Integer lastPerCol = matrix[i+time][column - time - 1];
res.add(lastPerCol);
i++;
}
if (time < row - 1 - time) {
Integer[] lastRow = matrix[row - 1 - time];
int right = column - 1 - time, left = time;
List<Integer> list = new ArrayList<>();
while (left < right+1) {
list.add(lastRow[right]);
right--;
}
res.addAll(list);
}
i=time;
while (row - i - 2 > time ) {
Integer firPerRow = matrix[row - i - 2][time];
res.add(firPerRow);
i++;
}
time++;
}
return res;
}
}