螺旋矩阵

37 阅读1分钟
// 螺旋矩阵  
// 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]  
// 输出:[1,2,3,6,9,8,7,4,5]  
public static List<Integer> spiralOrder(int[][] matrix){  
    if(matrix.length==0)return new ArrayList<Integer>();  
    int l=0,r=matrix[0].length-1,  
    t=0,b=matrix.length-1,x=0;  
    Integer[] res = new Integer[(r + 1) * (b + 1)];  
    while (true){  
        for (int i=l; i<=r; i++)res[x++]=matrix[t][i];  
        if(++t>b)break;  
        for(int i=t; i<=b; i++)res[x++]=matrix[i][r];  
        if(l>--r)break;  
        for(int i=r;i>=l;i--)res[x++]=matrix[b][i];  
        if(t>--b)break;  
        for(int i=b;i>=t;i--)res[x++]=matrix[i][l];  
        if(++l>r)break;  
    }  
    return Arrays.asList(res);  
}