LeetCode54
题目
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
示例 2:
输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
代码
真不错真不错 , switch真不错!(
对数组进行遍历
到了右界就往下走, 到了下届就往左走, 到了左界就往上走, 到了上届就往右走以此往复
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> list = new ArrayList<Integer>();
int x = matrix.length;//
if(x == 0){
return list;
}
int y = matrix[0].length;//
int y2 = 0;
int x2 = 0;
//X是行, y是列
int i = 0;
int j = 0;
//定义两个定位指针
int sum = x * y;
char grade = 'Y';
for(int w = 0; w < sum;){
switch (grade){
case 'Y':
for( i = x2 , j = y2; j < y; j++){
list.add(matrix[i][j]);
w++;
}
x2++;
grade = 'X';
break;
case 'X':
for(i = x2 , j = y - 1; i < x; i++){
list.add(matrix[i][j]);
w++;
}
y--;
grade = 'Z';
break;
case 'Z':
for(i = x - 1, j = y - 1; j >= y2; j--){
list.add(matrix[i][j]);
w++;
}
x--;
grade = 'S';
break;
case 'S':
for(i = x - 1, j = y2; i >= x2 ; i--){
list.add(matrix[i][j]);
w++;
}
y2++;
grade = 'Y';
break;
}
}
return list;
}
}