最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 前端刷题路-Day21|刷题打卡

    正文概述 掘金(rexkentzheng)   2021-04-19   604

    掘金团队号上线,助你 Offer 临门! 点击 查看详情

    爬楼梯(题号70)

    题目

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

    每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

    注意:给定 n 是一个正整数。

    示例 1:

    输入: 2
    输出: 2
    解释: 有两种方法可以爬到楼顶。
    
    1.  1 阶 + 1 阶
    2.  2 阶
    

    示例 2:

    输入: 3
    输出: 3
    解释: 有三种方法可以爬到楼顶。
    
    1.  1 阶 + 1 阶 + 1 阶
    2.  1 阶 + 2 阶
    3.  2 阶 + 1 阶
    

    链接

    leetcode-cn.com/problems/cl…

    解释

    乍一看一脸懵逼,仔细一看就是斐波那契数列,问题迎刃而解。

    自己的答案(简单递归)

    var climbStairs = function(n) {
      if (n <= 2) return n
      return climbStairs(n - 2) + climbStairs(n - 1)
    };
    

    确实很简单,但递归次数太多,会直接超时,无法采用

    自己的答案(递归+记忆化)

    var climbStairs = function(n) {
      var res = [0,  1, 2]
      function findNum(n) {
        if (!res[n]) {
          res[n] = (res[n - 1] || findNum(n - 1)) + (res[n - 2] || findNum(n - 2))
          return res[n]
        }
        return res[n]
      }
      return findNum(n)
    };
    

    利用res存储已经算过的值,如果有直接取,如果没有则开始i计算。

    其实这种方法的性能已经不错了,跑了几次,最高能到90%以上,也不知道为啥,但仍然有更优解。

    自己的答案(动态规划)

    var climbStairs = function(n) {
      var res = [0, 1, 2]
      for (let i = 3; i < n + 1; i++) {
        res[i] = res[i - 1] + res[i - 2]
      }
      return res[n]
    };
    

    先给res赋值,为了解决n是1或者2的情况。

    之后从3开始循环,直到i等于n,每次新的i值等于前两位的和。

    最后取res的最后一位即可。

    倒序思想,从小到大递增,简单易懂。

    自己的答案(动态规划升级)

    从?的答案可以看出来,其实每次n只要取n-1n-2的值即可,那么数组里是不是只要留两个值就行了?答案是可以的:

    var climbStairs = function(n) {
      if (n <= 2) return n
      var res = [1, 2]
      for (let i = 3; i < n + 1; i++) {
        res = [res[1], res[0] + res[1]]
      }
      return res[1]
    };
    

    当然了,其实用两个变量来代替res[0]res[1]也可以,性能上的细微差别。

    更好的方法

    更好的方法当然是有的,但笔者这辈子是不可能想出来的,有两种:

    1. 矩阵快速幂

    2. 通项公式

    有兴趣的同学可以看看LeetCode的官方题解,说的比较详细:leetcode-cn.com/problems/cl…



    PS:想查看往期文章和题目可以点击下面的链接:

    这里是按照日期分类的?

    前端刷题路-目录(日期分类)

    经过有些朋友的提醒,感觉也应该按照题型分类
    这里是按照题型分类的?

    前端刷题路-目录(题型分类)

    有兴趣的也可以看看我的个人主页?

    Here is RZ


    起源地下载网 » 前端刷题路-Day21|刷题打卡

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元