119. Pascal's Triangle II
Easy
Given an integer rowIndex
, return the rowIndexth
(0-indexed) row of the Pascal's triangle.
In Pascal's triangle, each number is the sum of the two numbers directly above it as shown:
Example 1:
Input: rowIndex = 3
Output: [1,3,3,1]
Example 2:
Input: rowIndex = 0
Output: [1]
Example 3:
Input: rowIndex = 1
Output: [1,1]
Constraints:
0 <= rowIndex <= 33
Follow up: Could you optimize your algorithm to use only O(rowIndex)
extra space?
<내코드>
class Solution:
def getRow(self, rowIndex: int) -> List[int]:
if rowIndex == 0 or rowIndex == 1 :
output = [1] * (rowIndex + 1)
return output
output = [1] * (2)
for i in range(2, rowIndex + 1):
newList = [1] * (i + 1)
print(newList)
for j in range(1,i):
newList[j] = output[j-1] + output[j]
print(newList)
output = newList
return output
- 지금 DP 방식이 아닌 2중반복문을 사용함 수정이 필요함
=> 문제를 알아보니 이 문제의 핵심은 시간효율성이 아니라 공간효율성임
- 최종적으로 필요한건 마지막 부분의 리스트 임
=> 하나씩 크기가 늘려지는 리스트 출력할 필요없음
<모범사례>
class Solution:
def getRow(self, rowIndex: int) -> List[int]:
row = [1] * (rowIndex + 1) # 1로 채워진 초기 행
for i in range(1, rowIndex):
for j in range(i, 0, -1): # 뒤에서부터 앞으로 값 갱신
row[j] += row[j - 1]
return row
- 처음부터 최종적으로 리턴할 리스트의 크기로 초기화 가능!!!
- 뒤에서 부터 채우면 쉬워짐
=> 이전 값 보존을 하면서 이용이 가능해지기 때문임
<보충학습>
nums = [1, 2, 3, 4]
num = 0
for i in range(len(nums) - 1, -1, -1):
num += nums[i]
nums[i] = num
print(nums)
뒤에서 부터 누적하는 방식 학습하기
'문제풀이 > 일일연습문제' 카테고리의 다른 글
[Graph]99클럽 코테 스터디 22일차 TIL + 1916-find-center-of-star-graph (0) | 2024.08.15 |
---|---|
[Greedy]99클럽 코테 스터디 21일차 TIL + 0561-array-partition (0) | 2024.08.14 |
[Greedy]99클럽 코테 스터디 19일차 TIL + 프로그래머스/1/135808. 과일 장수 (0) | 2024.08.09 |
[DFS/BFS]99클럽 코테 스터디 18일차 TIL + 0933-increasing-order-search-tree (0) | 2024.08.08 |
[DFS/BFS]99클럽 코테 스터디 17일차 TIL + 0094-binary-tree-inorder-traversal (0) | 2024.08.07 |