程序检查我们可以移动k次并返回到python中第一位的方式数量

假设我们在n个长度列表的位置0,并且在每一步上,我们可以向右移动一个位置或向左移动一个位置(不超出范围),或停留在同一位置。现在,如果我们可以精确地走k步,那么我们就必须找出可以走多少个唯一的步数并返回到索引0。如果答案很大,则返回mod 10 ^ 9 + 7。

因此,如果输入类似n = 7 k = 4,则输出将为9,因为操作是- 

  • [右,右,左,左],

  • [右,左,右,左],

  • [住宿,住宿,住宿,住宿],

  • [右,左,停留,停留],

  • [Stay,Stay,Right,Left],

  • [右,留,留,左],

  • [右,留,左,留],

  • [停留,右,左,停留],

  • [停留,向右,停留,向左],

为了解决这个问题,我们将遵循以下步骤-

  • m:= 10 ^ 9 + 7

  • N:=长度

  • 定义一个功能dp()。我要跳

  • 如果跳跃等于0,则

    • 返回(当我等于0时为true,否则为false)

  • 计数:= dp(i,跳-1)

  • 如果我> = 0,那么

    • 计数:=计数+ dp(i + 1,跳-1)

  • 如果我<= N-1,则

    • 计数:=计数+ dp(i-1,跳-1)

  • 返回计数

  • 从主要方法执行以下操作:

  • 返回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
猜你喜欢