https://leetcode.com/problems/spiral-matrix/description/?envType=study-plan-v2&envId=top-interview-150

  1. 우하좌상의 우선순위로 갈 수 있는 동안 진행한다
  2. 더 이상 진행할 수 없으면 방향을 전환한다.
  3. 네 방향 전부 진행할 수 없다면 최종 종료
class Solution {
    
    static final int[][] DIRECTION = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};

    public List<Integer> spiralOrder(int[][] matrix) {
        int n = matrix.length;
        int m = matrix[0].length;
        List<Integer> result = new ArrayList<>();
        boolean[][] visited = new boolean[n][m];
        int r = 0;
        int c = 0;
        int d = 0;
        while (true) {
            result.add(matrix[r][c]);
            visited[r][c] = true;
            int nr = r + DIRECTION[d][0];
            int nc = c + DIRECTION[d][1];

            int cnt = 0;
            while (!isValid(nr, nc, n, m) || visited[nr][nc]) {
                d = (d + 1) % 4;
                nr = r + DIRECTION[d][0];
                nc = c + DIRECTION[d][1];
                cnt++;

                if (cnt >= 4) {
                    return result; 
                }
            }
            r = nr;
            c = nc;
        }
    }

    private boolean isValid(int r, int c, int n, int m) {
        return r >= 0 && r < n && c >= 0 && c < m;
    }
}

'Algorithm > LeetCode' 카테고리의 다른 글

LeetCode 71 - Simplify Path  (0) 2024.10.18
LeetCode 120 - Triangle  (0) 2024.10.18
LeetCode 108 - Convert Sorted Array to Binary Search Tree  (0) 2024.10.17
LeetCode 53 - Maximum Subarray  (2) 2024.10.16
LeetCode 35 - Search Insert Position  (2) 2024.10.16

+ Recent posts