Leetcode Hot 100 Problems —— 70. 爬楼梯问题
爬楼梯
简单描述:
现在有n阶楼梯,每次只能爬一阶或者两阶,
问:一共有多少种走法?
递归解法#
递归公式:
1, n=1 2, n=2 f(n-1)+f(n-2), n>3 }
直接递归#
比较好理解,将递归公式翻译就行。代码如下:
if(n==1 || n==2) return n; return climbstair_digui(n-1)+climbstair_digui(n-2); }
高复杂度,时间复杂度O(n^2)
重复计算,因为每一次分支递归都有可能计算前面计算过的!
比如:f6 = f5 + f4, f5 = f4 + f3, f4 = f3 + f2...
解决办法,存储计算结果,以空间换时间。
存储中间结果的递归法#
- 使用数组存储:
int climbstair_ar(int n){ if(n==1 || n==2) return n; if(0 != already[n]) return already[n]; already[n] = climbstair_ar(n-1)+climbstair_ar(n-2); return already[n]; }
- 使用map存储
map<int,int> almap; int climbstair_mp(int n){ if(n==1||n==2) return n; if(0 != almap.count(n)) return almap[n]; int result = climbstair_mp(n-1)+climbstair_mp(n-2); almap[n] = result; return result; }
以上两种解法时间复杂度约为O(n)!但空间复杂度略高。
使用非递归法——迭代累加#
自低向下,由已知累加。
使用两个单独的变量,存储两个可能的累加值
时间复杂度更低,空间复杂度更低!
if(n==1||n==2) return n; int result = 0; int pre=2; int prepre=1; for(int i=3;i<=n;i++){ result = pre + prepre; prepre = pre; pre = result; } return result; }
作者:Mengjie Ye
出处:https://ymj68520.cnblogs.com/
版权声明:本文为博主原创或转载文章,欢迎转载,但转载文章之后必须在文章页面明显位置注明出处,否则保留追究法律责任的权利。如您有任何疑问或者授权方面的协商,请 .
如果,您希望更容易地发现我的新文章,不妨点击一下绿色通道的【关注我】。
如果您觉得阅读本文对您有帮助,请点击一下右下方的推荐按钮,您的推荐将是我写作的最大动力!版权声明:本文为博主原创或转载文章,欢迎转载,但转载文章之后必须在文章页面明显位置注明出处,否则保留追究法律责任的权利。如您有任何疑问或者授权方面的协商,请 .
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!