LeetCode/Pascal's Triangle
[ h tps : // / ㅇ t 여기. 코 m / p 로b ㎇ ms / 파 s 또는 ls-t 리안 g ぇ / ]
Given a non-negative integer numRows, generate the first numRows of Pascal's triangle.
In Pascal's triangle, each number is the sum of the two numbers directly above it.
Example:
파스칼의 삼각형이라고 불리는 것을, 수열을 거듭해 가는 것으로 만듭니다.
각각의 수열은, 상단의 수열의 2개의 값의 합이 되어 있는 것이 특징입니다.
해답·해설
해법 1
내 submit 한 기술입니다.
어리석게 numRows 단째까지의 수열을 1개 1개 만들어, 쌓아 갑니다.
상단의 수열의 두 값을 더하여 새로운 수열을 계산할 때,
l_pre = [0]+ans[-1]+[0]
와 같이 수열의 양단에 [0]을 추가하고,
l_nxt = [l_pre[i]+l_pre[i+1] for i in range(len(l_pre)-1)]
처럼 깔끔한 루프 처리가 되도록 하고 있습니다.
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
ans = []
if numRows > 0:
ans.append([1])
for _ in range(numRows-1):
l_pre = [0]+ans[-1]+[0]
l_nxt = [l_pre[i]+l_pre[i+1] for i in range(len(l_pre)-1)]
ans.append(l_nxt)
return ans
해법 2
Discussion 중, 이것은 좋다고 생각한 해법을 소개합니다.
pascal = [[1]*(i+1) for i in range(numRows)]
로서, 처음에 모든 값을 1로 해 numRows 단째까지의 삼각형을 만들어 버리고 나서, 올바른 값을 대입합니다.
해법 1과 비교해 시간·공간 계산량은 변하지 않습니다만, 공식보다 더욱 깔끔한 아름다운 해법이라고 생각합니다.
class Solution:
def generate(self, numRows: int) -> List[List[int]]:
pascal = [[1]*(i+1) for i in range(numRows)]
for i in range(numRows):
for j in range(1,i):
pascal[i][j] = pascal[i-1][j-1] + pascal[i-1][j]
return pascal
Reference
이 문제에 관하여(LeetCode/Pascal's Triangle), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mhiro216/items/24e557580d3018c43c8e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)