php 上楼梯问题 递归,算法:爬楼梯问题中的递归

背景

最近在刷 leetCode 的时候发现一个问题,解决的思路其实完全可以用递归去实现,用递归的话代码又简洁,三四行代码轻松搞定,但在提交运行后却提示运行超时。不禁对递归思想产生得系统消耗有了更深得认识。

题目

f8d080726b1d

LeetCode 70、爬楼梯

递归方案

class Solution {

public int climbStairs(int n) {

if (n<= 2){

return n;

}

return climbStairs(n- 1)+ climbStairs(n- 2);

}

}

代码虽然简洁,但是但是,运行的时候提示超出时间限制。后来自己随便输入了好几个值,发现返回的方法数都是正确的,就只是执行时间过长。后来,看了下其他的解决方案,找到一个思想与递归类似,但却能顺利通过的方案。

优化方案

class Solution {

public int climbStairs(int n) {

if (n<= 2){

return n;

}

int firstStep = 1;

int secondStep = 2;

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

int temp = firstStep+ secondStep;

firstStep = secondStep;

secondStep = temp;

}

return secondStep;

}

}

优化方案的思想与递归方案的思想类似,都有点斐波那契函数的味道。优化方案中只是利用了一个临时变量做中转,进行值得替换。不管是从执行时间还是内存消耗层面来看,都比递归方案好上不少。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值