Leetcode Python - 118. Pascal’s Triangle

Leetcode #118 - Pascal’s Triangle

리트코드의 문제 118 ‘Pascal’s Triangle’을 파이썬으로 풀어 보도록 하겠습니다. Pascal’s triangle을 이중 list로 반환하는 문제입니다.

brute force 방식으로 풀었습니다.

class Solution:
    def generate(self, numRows):
        if numRows == 1:
            return [[1]]
        elif numRows == 2:
            return [[1],[1,1]]
        
        res = [[1],[1,1]]
        
        for row in range(2, numRows):
            tmp = []
            for col in range(row+1):
                
                if col == 0:
                    tmp.append(1)
                elif col == row:
                    tmp.append(1)
                else:
                    tmp.append(res[row-1][col-1] + res[row-1][col])
            res.append(tmp)
        return res

시간복잡도는 O(n²) : 첫번째 for loop (n) * 두번째 for loop (n-1)

공간복잡도는 O(nᴺ) : res는 nᴺ/2 크기


개선하기

discuss를 참고해보겠습니다.

resultset = [[1]* (i+1) for i in range(numRows)]
    for i in range(numRows):
        for j in range(1,  i):
            resultset[i][j] = resultset[i-1][j-1] + resultset[i-1][j]

    return resultset

위처럼 구현하면 시간복잡도 자체는 그대로이지만, append 함수를 안 쓰기 때문에 속도가 빨라지고, 라인 수를 많이 줄일수 있습니다.