记录 右,下,上左,四个边界,每次拐弯时更新边界值,再进行下一次拐弯,循环往复,直至结束。结束条件为左边界加一大于右边界,或者上边界加一大于下边界。
public class Solution {
public ArrayList<Integer> spiralOrder(int[][] m) {
ArrayList<Integer> list = new ArrayList<>();
if(m.length == 0) {
return list;
}
int l = 0;
int r = m[0].length - 1;
int top = 0;
int b = m.length - 1;
int x = 0;
while(true) {
for(int i = l; i <= r; i++) {
list.add(m[top][i]) ;
}
if(++top > b){
break;
}
for(int i = top; i <= b; i++){
list.add( m[i][r]);
}
if(l > --r){
break;
}
for(int i = r; i >= l; i--){
list.add(m[b][i]);
}
if(top > --b){
break;
}
for(int i = b; i >= top; i--){
list.add(m[i][l]);
}
if(++l > r){
break;
}
}
return list;
}
}