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]
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res = new ArrayList<>();
int m = matrix.length;
if(m==0) return res;
int n = matrix[0].length;
int top = 0,down=m-1;
int left = 0,right = n-1;
while(top<=down && left<=right){
if(top==down){//只剩一行
for(int j = left;j<=right;j++){
res.add(matrix[top][j]);
}
break;
}
if(left==right){//只剩一列
for(int i = top;i<=down;i++){
res.add(matrix[i][left]);
}
break;
}
for(int j = left;j<=right;j++){//上边界
res.add(matrix[top][j]);
}
for(int i = top+1;i<=down-1;i++){//右边界
res.add(matrix[i][right]);
}
for(int j = right;j>=left;j--){//下边界
res.add(matrix[down][j]);
}
for(int i = down-1;i>=top+1;i--){//左边界
res.add(matrix[i][left]);
}
top++;
down--;
left++;
right--;
}
return res;
}
}