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]
.
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> list = new ArrayList<Integer>();
if(matrix.length!=0 && matrix[0].length!=0) {
int a = 0,b = matrix[0].length-1,c = matrix.length-1,d = 0;
while (true) {
for(int i = d;i <= b;i ++) {list.add(matrix[a][i]);}
if(list.size() == matrix[0].length*matrix.length)break;
a++;
for(int i = a;i <= c;i ++) {list.add(matrix[i][b]);}
if(list.size() == matrix[0].length*matrix.length)break;
b--;
for(int i = b;i >= d;i --) {list.add(matrix[c][i]);}
if(list.size() == matrix[0].length*matrix.length)break;
c--;
for(int i = c;i >= a;i --) {list.add(matrix[i][d]);}
if(list.size() == matrix[0].length*matrix.length)break;
d++;
}
}
return list;
}
}
思路:
一个矩阵,会有上右下左四个方向,要螺旋的读取,就要控制矩阵的四个方向,让四个方向的值按螺旋变化就可以解决问题了。