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<Integer> spiralOrder(int[][] matrix) {
        List<Integer> 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;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容