螺旋矩阵(Spiral Matrix)最容易理解的思路

题目:Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. 

输入:

Input:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]

输出:

Output: [1,2,3,6,9,8,7,4,5]
public List spiralOrder(int[][] matrix) {
    
        List list =new ArrayList();
        //如果为空
        if(matrix.length == 0 || matrix == null) return list;
        //上下左右
        int top = 0,bottom = matrix.length-1,left = 0,right = matrix[0].length-1;
        //一直循环,直到访问完
        while(true){

            //每次减少上面一行
            for(int i = left;i <= right;i++)   list.add(matrix[top][i]);
            //往下走一行
            top++;
            //判断是否已经访问完了
            if(top > bottom)   break;

            //每次减少右面一列
            for(int i = top;i <= bottom;i++)   list.add(matrix[i][right]);
            //往左走一列
            right--;
            //判断是否已经访问完了
            if(left > right)   break;

            //每次减少下面一行
            for(int i = right;i >= left;i--)   list.add(matrix[bottom][i]);
            //往上走一行
            bottom--;
            //判断是否已经访问完了
            if(top > bottom)   break;

            //每次减少左面一列
            for(int i = bottom;i >= top;i--)   list.add(matrix[i][left]);
            //往右走一列
            left++;
            //判断是否已经访问完了
            if(left > right)   break;
        }
        return list;
    }

思路: 先访问上面一行,判断是否结束。

           先访问右面一列,判断是否结束。

           先访问下面一行,判断是否结束。

           先访问左面一列,判断是否结束。

           最好理解的方式,顺时针螺旋输出。

你可能感兴趣的:(leetcode,leetcode)