こちらは「Pascal’s Triangle」のPythonによる解答例となっております。この問題は、パスカルの三角形を生成する問題です。
問題
非負の整数 numRows を入力として受け取り、パスカルの三角形の最初の numRows 行を出力します。
解法
この問題は、二重ループを用いた1つのアプローチがあります。まず、numRows行のリストを用意し、各行に対して、その行の要素を計算してリストに追加します。
アルゴリズムの概要を以下に述べます。
- numRows行のリストを初期化します。
- 各行に対して、その行の要素を計算し、リストに追加します。
- リストを返します。
Pythonコード
以下のコードが、「Pascal’s Triangle」を解くためのPythonプログラムとなります。
### Function ##################################################################
def solve(num=0):
solver = Solution().generate
if 1 <= num <= Input().input: id_LIST = [num]
else: id_LIST = [id+1 for id in range(Input().input)]
for id in id_LIST:
data = Input(id)
ans = solver(data.numRows)
result = "OK" if ans==data.ans else "NG"
print(f"[{str(id).zfill(3)}] {result}")
### Class #####################################################################
class Solution(object):
def generate(self, numRows):
"""
:type numRows: int
:rtype: List[List[int]]
"""
### row0: 1
### row1: 1 1
### row2: 1 2 1
### row3: 1 3 3 1
### row4: 1 4 6 4 1
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
#==============================================================================
class Input:
def __init__(self, num=0):
if num == 1:
self.numRows = 5
self.ans = [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
elif num == 2:
self.numRows = 1
self.ans = [[1]]
else:
self.input = 2
### Main ######################################################################
if __name__ == "__main__":
solve()
###############################################################################