Pythonの一意のパス
n x mグリッド(n行m列)の左上隅にロボットがあるとします。ロボットは、どの時点でも下側または右側のどちらかにしか移動できません。ロボットは、グリッドの右下隅に到達しようとしています(下の図で「END」とマークされています)。では、可能な一意のパスがいくつあるかを見つける必要がありますか?たとえば、m=3およびn=2の場合、グリッドは次のようになります-
Robo | | |
| | END |
出力は3になるので、開始位置から終了位置に到達する方法は全部で3つあります。これらのパスは-
です- 右→右→下
- 右→下→右
- 下→右→右
手順を見てみましょう-
- これを解決するために動的計画法アプローチを使用します
- row:=nおよびcol:=mとし、次数n x mのテーブルDPを作成し、これに-1を入力します
- DP [row – 2、col-1]:=1
- 0からcolの範囲のiの場合
- DP [n – 1、i]:=1
- 0から行の範囲のiの場合
- DP [i、col – 1]:=1
- 行-2から-1までの範囲のiの場合
- 列-2から-1までの範囲のjの場合
- DP [i、j]:=DP [i + 1、j] + DP [i、j + 1]
- 列-2から-1までの範囲のjの場合
- DP [0、0]を返す
理解を深めるために、次の実装を見てみましょう-
例
class Solution(object): def uniquePaths(self, m, n): row = n column = m dp = [[-1 for i in range(m)] for j in range(n)] dp[row-2][column-1] = 1 for i in range(column): dp[n-1][i] = 1 for i in range(row): dp[i][column-1]=1 for i in range(row-2,-1,-1): for j in range(column-2,-1,-1): dp[i][j] = dp[i+1][j] + dp[i][j+1] return dp[0][0] ob1 = Solution() print(ob1.uniquePaths(10,3))
入力
10 3
出力
55
-
Pythonで特定のエッジを含む一意のパスの数をカウントするプログラム
(u、v)の形式のエッジのリストがあり、これらがツリーを表しているとします。エッジごとに、入力で指定されたのと同じ順序で、そのエッジを含む一意のパスの総数を見つける必要があります。 したがって、入力がエッジのような場合=[[0、1]、[0、2]、[1、3]、[1、4]] その場合、出力は[6、4、4、4]になります。 これを解決するには、次の手順に従います- adj:=指定されたエッジからの隣接リスト count:=空のマップ 関数dfs()を定義します。これにはx、親が必要です count [x]:=1 adj [x]のnbごとに、実行 n
-
リスト内の代替範囲スライス(Python)
スライスは、Pythonで特定のリストのデータを分析するための非常に一般的な手法です。ただし、分析のために、特定の範囲の値のリストのスライスを作成する必要がある場合があります。たとえば、リストから4要素ごとにスキップして、4要素を印刷する必要があります。この記事では、Pythonでの範囲スライスのこの概念について説明します。 range()とlen()の使用 リストの全長を通過するforループを作成しますが、除算性テストを満たす要素のみを選択します。除算性テストでは、リスト内のk番目の要素の余りの値を確認します。余りが範囲値以上の場合、要素を受け入れます。それ以外の場合は受け入れません。