54. Spiral Matrix

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

[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]
You should return [1,2,3,6,9,8,7,4,5].

Solution1: Round1

思路:
Time Complexity: O(mn) Space Complexity: O(1)

Solution1 Code:

class Solution {
    public List spiralOrder(int[][] matrix) {
        List result = new ArrayList<>();
        if(matrix == null || matrix.length == 0 || matrix[0].length == 0) return result;
        int m = matrix.length;
        int n = matrix[0].length;

        // four borders
        int right = n - 1;
        int down = m - 1;
        int left = 0;
        int up = 1;
            
        // start
        int row = 0, col = 0;
        while(true) {
            
            // to the right
            while(col <= right) {
                result.add(matrix[row][col++]);
            }
            col--; // step back
            row++; // next
            right--; // change border 
        
            if((row < up || row > down) && (col < left || col > right)) break;
        
            // downwards
            while(row <= down) {
                result.add(matrix[row++][col]);
            }
            row--; // step back
            col--; // next
            down--; // change border
        
            if((row < up || row > down) && (col < left || col > right)) break;
        
            // to the left
            while(col >= left) {
                result.add(matrix[row][col--]);
            }
            col++; // step back
            row--; // next
            left++; // change border
            
            if((row < up || row > down) && (col < left || col > right)) break;
            
            // upwards
            while(row >= up) {
                result.add(matrix[row--][col]);
            }
            row++; // step back
            col++; // next
            up++; // change border
            if((row < up || row > down) && (col < left || col > right)) break;

            
        }

        return result;
    }
}

你可能感兴趣的:(54. Spiral Matrix)