반응형
Given an integer numRows, return the first numRows of Pascal's triangle.
In Pascal's triangle, each number is the sum of the two numbers directly above it as shown:
Example 1:
Input: numRows = 5 Output: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
Example 2:
Input: numRows = 1 Output: [[1]]
Constraints:
1 <= numRows <= 30
# runtime: 56ms
class Solution:
def generateHelp(self, n: int, prev_level: List[int]) -> List[int]:
if n <= 1: # 0층과 1층일 경우
return [1] * (n + 1)
new_level = [1] # 첫 번째 원소
for i in range(1, n):
new_level.append(prev_level[i - 1] + prev_level[i])
new_level.append(1) # 마지막 원소
return new_level
def generate(self, numRows: int) -> List[List[int]]:
res_levels = [] # answer
prev_res = [] # 이전 층
for i in range(numRows):
tmp_res = self.generateHelp(i, prev_res) # 새로운 층
res_levels.append(tmp_res)
prev_res = tmp_res
return res_levels
# runtime: 36ms
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
res = [[1] * i for i in range(1, numRows + 1)]
for r in range(2, len(res)):
for c in range(1, len(res[r]) - 1):
res[r][c] = res[r - 1][c - 1] + res[r - 1][c]
return res
위의 두 코드 모두 동일한 로직이지만 첫 번째 코드의 runtime이 더 긴 이유는 new_level과 res_levels에 계속해서 append() 를 실행하기 때문이 아닐까 싶다. 두 코드 모두 for문을 통해 다음 층 값은 이전 층 값의 합으로 이루어짐을 완성시켰다. 파스칼의 삼각형대로 모든 층의 첫 번째 그리고 마지막 원소가 1임에만 유의하면 된다.
728x90
반응형
'문돌이 존버 > 프로그래밍 스터디' 카테고리의 다른 글
(프로그래밍 연습 문제 풀이) [1차] 추석 트래픽 (0) | 2021.10.14 |
---|---|
(leetcode 문제 풀이) Excel Sheet Column Title (0) | 2021.10.12 |
(leetcode 문제 풀이) Balanced Binary Tree (0) | 2021.10.01 |
(leetcode 문제 풀이) Longest Common Prefix (0) | 2021.09.30 |
(leetcode 문제 풀이) Add Binary (0) | 2021.09.26 |