Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでパスカルの三角形のn番目の行を求める方法を解説

パスカルの三角形とは

ある数 n が与えられたとき、パスカルの三角形の n 番目(0始まり)の行を求めることを考えます。

パスカルの三角形は、次のようなルールで作成できます。

  • 最上行は「1」のみで構成される
  • 2行目以降は、左上の数と右上の数を足し合わせた値が並ぶ

具体的には、以下のような形になります。

例えば入力が 4 の場合、出力は [1, 4, 6, 4, 1] となります。

解法のアプローチ

この問題は、以下の手順で解くことができます。

  • n が 0 の場合 → [1] を返す
  • n が 1 の場合 → [1, 1] を返す
  • ls を [1, 1]、temp を [1, 1] として初期化する
  • i を 2 から n+1 まで繰り返す
    • ls に temp を代入する
    • temp を [1] として初期化する
    • i を 0 から ls のサイズ - 1 まで繰り返し、ls[i] + ls[i+1] の値を temp の末尾に追加する
    • temp の末尾に 1 を追加する
  • 最後に temp を返す

実装例(Python)

それでは、実際のコードを見てみましょう。

class Solution:
    def solve(self, n):
        if n==0:
            return [1]
        if n==1:
            return [1,1]
        ls=[1,1]
        temp=[1,1]
        for i in range(2,n+1):
            ls=temp
            temp=[1]
            for i in range(len(ls)-1):
                temp.append(ls[i]+ls[i+1])
            temp.append(1)
        return temp
ob = Solution()
print(ob.solve(4))

入力

4

出力

[1, 4, 6, 4, 1]

補足:二項係数との関係

パスカルの三角形の n 番目の行は、二項定理における二項係数 C(n, k) と一致します。つまり、n 番目の行の k 番目の要素は「n 個から k 個を選ぶ組み合わせの数」を表しています。この性質を利用すると、math.comb 関数を使って直接計算する方法もあります。

import math

def pascal_row(n):
    return [math.comb(n, k) for k in range(n + 1)]

print(pascal_row(4))  # 出力: [1, 4, 6, 4, 1]

状況に応じて、反復的な方法と数学的な公式のどちらかを選択するとよいでしょう。

  1. Pythonで行列の転置を求めるプログラム

    この記事では、与えられた問題に対する解法とアプローチについて詳しく解説します。 問題文 ある行列が与えられたとき、その転置を同じ行列に格納し、結果を表示する必要があります。 行列の転置とは、行を列に、列を行に入れ替えたものです。言い換えれば、行列Aの転置は、要素A[i][j]をA[j][i]と入れ替えることで得られます。 実装例 N = 4 def transpose(A): for i in range(N): for j in range(i+1, N): A[i][j], A[j][i] = A[j][i], A[i][j] # ドライ

  2. Pythonで配列(リスト)の合計を求める方法をわかりやすく解説

    この記事では、配列(リスト)の合計値を求めるという問題に対して、Pythonでの解決策とアプローチをわかりやすく解説します。 問題の定義 配列が入力として与えられたとき、その配列に含まれるすべての要素の合計を計算することを目標とします。 例えば、[1, 2, 3, 4, 5] という配列が与えられた場合、出力は 15 になります。 アプローチ1:ループを使った素朴な方法(総当たり法) 最も基本的な方法は、リストを先頭から順に走査し、各要素を合計用の変数に加算していくやり方です。手順は以下の通りです。 合計を格納する変数を 0 で初期化します。 for ループでリストの各要素を取り出し、順番に