博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode系列]爬梯问题的递归解法转换为迭代解法
阅读量:6428 次
发布时间:2019-06-23

本文共 744 字,大约阅读时间需要 2 分钟。

有一个n阶的梯子, 你每次只能爬1阶或2阶, 请问共有多少种登顶的爬法?(正好爬完n阶, 不能多也不能少)

本题最优解是直接套用菲波那切数列即可(因为菲波那切数列的第n个元素正好等于第n-1个元素和第n-2个元素的和, 与本题的要求完全相同).

递归解法:

1     int climbStairs(int n) {2         if (n < 3) return n;3         return climbStairs(n-1) + climbStairs(n-2);4     }

思路很清晰, 递归到当前阶数小于3阶时返回种类(因为比较容易计算, 并非一定是3阶), 这也是求解菲波那切数列的递归解法.

然而实际中这种解法对栈要求过大, 非常容易溢出. 因此有必要转化为迭代算法:

1     int climbStairs(int n) {2         vector
count(n+1);3 count[0] = 0;4 count[1] = 1;5 count[2] = 2;6 for (int i = 3; i <= n; i++)7 count[i] = count[i-1] + count[i-2];8 return count[n];9 }

简单总结一下: 从递归->迭代时, 只需要把思考过程转换为这种数列求解的思路, 从前几个元素开始向后推导即可, 推导的关系则与递归的返回表达式非常相似.

转载于:https://www.cnblogs.com/lancelod/p/3907402.html

你可能感兴趣的文章
C. Adidas vs Adivon
查看>>
BZOJ4241 : 历史研究
查看>>
(LeetCode)两个队列来实现一个栈
查看>>
[WebGL入门]十九,遮挡剔除和深度測试
查看>>
jquery封装常用方法
查看>>
什么是ICE (Internet Communications Engine)
查看>>
移动web开发之屏幕三要素
查看>>
求按小时统计的语句,该怎么处理
查看>>
TRUNCATE,DORP,DELETE
查看>>
Chrome的开发必备小技巧
查看>>
can-i-win(好)
查看>>
Centos6.5下安装protobuf及简单使用
查看>>
[SharePoint] SharePoint 错误集 3
查看>>
高压光耦
查看>>
[转]DPM2012系列之六:在Win7上安装DPM远程管理控制台
查看>>
postgres函数
查看>>
Microsoft AJAX Library Cheat Sheet(5): Number和Error类型的扩展
查看>>
批处理设置Java环境变量/命令行设置Java环境变量
查看>>
POJ 3580 SuperMemo(splay)
查看>>
AfxGetMainWnd函数
查看>>