작심삼일

[LeetCode] 59 | Spiral Matrix II | Python 본문

스터디/코테

[LeetCode] 59 | Spiral Matrix II | Python

yun_s 2022. 4. 13. 09:47
728x90
반응형

문제 링크: https://leetcode.com/problems/spiral-matrix-ii/


문제

Given a positive integer n, generate an n x n matrix filled with elements from 1 to $n^2$ in spiral order.


조건

  • 1 <= n <= 20

내 풀이

n이 최대 20까지이므로 recursion을 사용해도 time limit에 걸리지 않을 것이라는 생각에 recursion으로 구현했다.

사람이 이 문제를 푼다면 가장자리부터 1, 2, 3, ... 차례로 써 나갈 것이다.

그 방법을 코드로 구현했다.


코드

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        self.M = [[0 for _ in range(n)] for _ in range(n)]
        self.edge(0, n, 0, n, 1)
        
        return self.M
    
    def edge(self, sh, eh, sw, ew, n):
        for w in range(sw, ew):
            self.M[sh][w] = n
            n += 1
        
        for h in range(sh+1, eh):
            self.M[h][ew-1] = n
            n += 1
        
        for w in range(ew-2, sw-1, -1):
            self.M[eh-1][w] = n
            n += 1
        
        for h in range(eh-2, sh, -1):
            self.M[h][sw] = n
            n += 1
        
        if sh+1 < eh-1:
            self.edge(sh+1, eh-1, sw+1, ew-1, n)
728x90
반응형
Comments