程序,查找在Python中有多少种方法可以爬楼梯(最多k次最大步数)
假设我们有一个阶梯为n的楼梯,并且还有另一个数字k,最初我们位于楼梯0,可以一次爬1、2或3步。但我们最多只能攀3次楼梯。现在我们必须找到爬楼梯的方法。
因此,如果输入类似n = 5,k = 2,则输出将为13,因为我们可以通过多种方式爬楼梯-
[1、1、1、1、1]
[2,1,1,1]
[1、2、1、1]
[1,1,2,1]
[1、1、1、2]
[1、2、2]
[2,1,2]
[2,2,1]
[1,1,3]
[1、3、1]
[3,1,1]
[2,3]
[3,2]
为了解决这个问题,我们将遵循以下步骤-
如果n等于0,则
返回1
如果n与1相同,则
返回1
k:= k,n的最小值
备忘:=大小为(n + 1)x(k + 1)的矩阵
对于0到k范围内的r,执行
memo [r,0]:= 1,memo [r,1]:= 1,memo [r,2]:= 2
对于3到n范围内的i
备忘录[0,i]:=备忘录[0,i-1] +备忘录[0,i-2]
对于1到k范围内的j,执行
count:= i / 3的商
如果count <= j,则
除此以外,
备忘录[j,i]:=备忘录[j,i-1] +备忘录[j,i-2] +备忘录[j,i-3]
备忘录[j,i]:=备忘录[j,i-1] +备忘录[j,i-2] +备忘录[j-1,i-3]
对于3到n范围内的i
返回备忘录[k,n]
让我们看下面的实现以更好地理解-
示例
class Solution:def solve(self, n, k):
if n==0:
return 1
if n==1:
return 1
k= min(k,n)
memo=[[0]*(n+1) for _ in range(k+1)]
for r in range(k+1):
memo[r][0]=1
memo[r][1]=1
memo[r][2]=2
for i in range(3,n+1):
memo[0][i]=memo[0][i-1]+memo[0][i-2]
for j in range(1,k+1):
for i in range(3,n+1):
count = i//3
if count<=j:
memo[j][i]=memo[j][i-1]+memo[j][i-2]+memo[j][i-3]
else:
memo[j][i]=memo[j][i-1]+memo[j][i-2]+memo[j-1][i-3]
return memo[k][n]
ob = Solution()print(ob.solve(n = 5, k = 2))
输入值
5, 2
输出结果
13
以上是 程序,查找在Python中有多少种方法可以爬楼梯(最多k次最大步数) 的全部内容, 来源链接: utcz.com/z/340807.html