题解 | #螺旋矩阵#
螺旋矩阵
http://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> spiralOrder(int[][] matrix) {
ArrayList<Integer> ans = new ArrayList<>();
if(matrix.length == 0)return ans; //这两句如果放在int m,n之后,[]的用例就过不了,别问,不知道为啥.
// lrtb代表可走的,当前的空行,走过会更新(±1)
int m = matrix.length;
int n = matrix[0].length;
int l=0, r=n-1, t=0, b=m-1;
while(true){
for(int i=l;i<=r;i++)ans.add(matrix[t][i]);
if(++t>b)break;//到边界时,t==b,所以再+1会>b
for(int i=t;i<=b;i++)ans.add(matrix[i][r]);
if(--r<l)break;
for(int i=r;i>=l;i--)ans.add(matrix[b][i]);
if(--b<t)break;
for(int i=b;i>=t;i--)ans.add(matrix[i][l]);
if(++l>r)break;
}
return ans;
}
}