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

k回移動してPythonで1位に戻る方法の数を確認するプログラム


n長さリストの位置0にいて、各ステップで、右に1か所または左に1か所(境界を超えない)移動するか、同じ位置にとどまることができるとします。ここで、正確にkステップを実行できる場合は、実行できる一意のウォークの数を見つけて、インデックス0に戻る必要があります。答えが非常に大きい場合は、mod 10 ^ 9+7を返します。

したがって、入力がn =7 k =4の場合、アクションは次のようになり、出力は9になります-

  • [右、右、左、左]、
  • [右、左、右、左]、
  • [Stay、Stay、Stay、Stay]、
  • [右、左、滞在、滞在]、
  • [滞在、滞在、右、左]、
  • [右、滞在、滞在、左]、
  • [右、滞在、左、滞在]、
  • [滞在、右、左、滞在]、
  • [滞在、右、滞在、左]、

これを解決するには、次の手順に従います-

  • m:=10 ^ 9 + 7
  • N:=長さ
  • 関数dp()を定義します。これには私がかかります、ジャンプ
  • ジャンプが0と同じ場合、
    • return(iが0と同じ場合はtrue、それ以外の場合はfalse)
  • count:=dp(i、jumps-1)
  • i> =0の場合、
    • count:=count + dp(i + 1、jumps-1)
  • i <=N-1の場合、
    • count:=count + dp(i-1、jumps-1)
  • 返品数
  • メインの方法から次の手順を実行します。
  • return dp(0、n)mod m

理解を深めるために、次の実装を見てみましょう-

class Solution:
   def solve(self, length, n):
      MOD = 10 ** 9 + 7
      N = length

      def dp(i, jumps):
         if jumps == 0:
            return +(i == 0)

         count = dp(i, jumps - 1)
         if i >= 0:
            count += dp(i + 1, jumps - 1)
         if i <= N - 1:
            count += dp(i - 1, jumps - 1)
         return count
      return dp(0, n) % MOD    
ob = Solution()
n = 7
k = 4
print(ob.solve(n, k))

入力

7, 4

出力

9

  1. 素数をチェックするPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −数が与えられているので、与えられた数が素数であるかどうかを確認する必要があります。 1より大きい特定の正の数で、1以外の要素はなく、その数自体は素数と呼ばれます。 2、3、5、7などは他の要素がないため素数です。 以下のこのプログラムでは、素数または非素数の性質について番号がチェックされます。 1以下の数は素数とは言えません。したがって、数値が1より大きい場合にのみ反復します。 ここで、その数が2から(num-1 // 2)の範囲の任意の数で正確に割り切れるかどうかを確認します。指定された範囲内に何ら

  2. アームストロング数をチェックするPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 整数nが与えられた場合、与えられた整数がアームストロング数であることを確認する必要があります。 正の整数は、次の場合、n次のアームストロング数と呼ばれます abcd... = a^n + b^n + c^n + d^n + … ここでは、3桁のアームストロング数、つまり3桁のブルートフォースアプローチについて説明します。 オーダーnのアームストロング番号を確認するには、3を行番号7の対応するオーダー値に置き換える必要があります。 それでは、実装を見てみましょう- 例