又是一道dp,本来想着滚动数组做,后来想了想好像不太好写,就直接开了个二维数组。
class Solution:
def numWays(self, steps: int, arrLen: int) -> int:
maxNum = 10**9+7
dp = [[0 for i in range(min(steps+1, arrLen))] for j in range(steps+1)]
dp[0][0] = 1
for i in range(1, steps+1):
for j in range(min(steps+1, arrLen)):
# print(i, j)
# 停留在原地
dp[i][j] = dp[i-1][j]
# 从左边转移
if j-1 >= 0:
dp[i][j] = (dp[i][j]+dp[i-1][j-1])%maxNum
# 从右边转移
# 最多只能到steps+1的位置,不然肯定回不去了
if j+1 < min(steps+1, arrLen):
dp[i][j] = (dp[i][j]+dp[i-1][j+1])%maxNum
return dp[steps][0]