54. Spiral Matrix

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

        int n = matrix.length, m = matrix[0].length;

        int rowBegin = 0, rowEnd = n - 1;
        int colBegin = 0, colEnd = m - 1;

        while (rowBegin <= rowEnd && colBegin <= colEnd){
            // go right
            if (rowBegin <= rowEnd && colBegin <= colEnd){
                for (int i = colBegin; i <= colEnd; i++){
                    ans.add(matrix[rowBegin][i]);
                }    
            }
            rowBegin++;

            // go down
            if (rowBegin <= rowEnd && colBegin <= colEnd){
                for (int i = rowBegin; i <= rowEnd; i++){
                    ans.add(matrix[i][colEnd]);
                }
            }
            colEnd--;

            // go left
            if (rowBegin <= rowEnd && colBegin <= colEnd){
                for (int i = colEnd; i >= colBegin; i--){
                    ans.add(matrix[rowEnd][i]);
                }
            }
            rowEnd--;

            // go up
            if (rowBegin <= rowEnd && colBegin <= colEnd){
                for (int i = rowEnd; i >= rowBegin; i--){
                    ans.add(matrix[i][colBegin]);
                }
            }
            colBegin++;
        }

        return ans;
    }
}

59. Spiral Matrix II

class Solution {
    public int[][] generateMatrix(int n) {
        int[][] board = new int[n][n];

        int rowBegin = 0, rowEnd = n - 1;
        int colBegin = 0, colEnd = n - 1;
        int tracker = 1;

        while (rowBegin <= rowEnd && colBegin <= colEnd){
            // go right
            if (rowBegin <= rowEnd && colBegin <= colEnd){
                for (int i = colBegin; i <= colEnd; i++){
                    board[rowBegin][i] = tracker++;
                }
            }
            rowBegin++;

            // go down
            if (rowBegin <= rowEnd && colBegin <= colEnd){
                for (int i = rowBegin; i <= rowEnd; i++){
                    board[i][colEnd] = tracker++;
                }
            }
            colEnd--;

            // go left
            if (rowBegin <= rowEnd && colBegin <= colEnd){
                for (int i = colEnd; i >= colBegin; i--){
                    board[rowEnd][i] = tracker++;
                }
            }
            rowEnd--;

            // go up
            if (rowBegin <= rowEnd && colBegin <= colEnd){
                for (int i = rowEnd; i >= rowBegin; i--){
                    board[i][colBegin] = tracker++;
                }
            }
            colBegin++;
        }

        return board;
    }
}

results matching ""

    No results matching ""