c语言爬楼梯递归算法,递归爬楼梯算法

博主正试图将一个递归的爬楼梯问题解决方案转换为迭代版本。递归算法基于动态规划,而博主在迭代实现中遇到了数组下标可能为负的问题,导致错误。博主寻求帮助来修正迭代代码,同时提到了Python中迭代解决方案的时间复杂度。
摘要由CSDN通过智能技术生成

我正在尝试将下面的算法从递归更改为迭代,并且遇到问题。 (图书:“破译编码访谈”)递归爬楼梯算法

问题:“一个孩子正在跑步楼梯,有n个步骤,一次可以跳1,2或3步。孩子可以通过很多方式跑上楼梯。“

本书的答案(递归):

public static int countWays(int n, int[] map) {

if (n < 0)

return 0;

if (n == 0)

return 1;

if (map[n] > -1)

return map[n];

map[n] = countWays(n - 1, map) + countWays(n - 2, map) + countWays(n - 3, map);

return map[n];

}

我的回答(迭代):我与我给出的答案有

public static int countWays(int n, int[] map) {

for (int i = 1; i <= n; i++) {

//Problem with writing it this way: index could be negative

map[i] = map[i - 1] + map[i - 2] + map[i - 3];

}

return map[n];

}

的一个问题是该行“地图[我 - 1] + map [i - 2] + map [i - 3]“可能会导致负指数,这会导致错误。

我的代码可能存在其他问题。

有人可以帮忙写这个吗?

+0

对于Python中的迭代O(n)和O(log(n))解决方案,请参见[本答案](https://stackoverflow.com/a/40920969/832230)。 –

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值