侧边栏壁纸
博主头像
Fonda's Lab 博主等级

关山难越,谁悲失路之人?萍水相逢,尽是他乡之客。

  • 累计撰写 49 篇文章
  • 累计创建 27 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

动态规划-爬楼梯(leetcode70)

LouisFonda
2024-04-26 / 0 评论 / 0 点赞 / 10 阅读 / 0 字 / 正在检测是否收录...

动态规划-爬楼梯(leetcode70)

动态规划- 爬楼梯 -70.png

分析:假设现在只有一个台阶,那么显然只有一种方法跳到楼顶,如果现在有两个台阶我可以选择每次只跳一个台阶,也可以选择一次性跳两个台阶,如果现在有三个台阶的话可以一阶一阶的跳,也可以先跳一阶再跳两阶,也可以先跳两阶再跳一阶,现在我们仔细想一下,我到第三阶的情况无外呼就是两种,要么从前面的第二阶跳一下上来,要么从前面的前面跳两阶上来,所以到第三阶的可能性不就是到前面那一阶的可能性,加上前面的前面那一阶的可能性,我们设置一个数组用于保存之前台阶可能性,不就能递推出后面我们要计算的可能性了吗?

/**
 * @param {number}
 * @return {number}
 */
var climbStairs = function(n) {
  if(n < 3) return n
  let dp = [] // 保存之前阶梯可能的次数
  dp[0] = 1
  dp[1] = 2
  for(let i= 2;i<n;i++){
    dp[i] = dp[i-1] + dp[i-2]
  }
  return dp[n-1]
};

我们只用在使用数组时起时只用到了最后两个状态,之前的状态根本就没用到,可以用两个变量保存起来,实现滑动数组的效果。

var climbStairs2 = function(n) {
  if(n < 3) return n
  let first = 1,second=2;
  for(let i= 2;i<n;i++){
    let temp = second;
    second = first + second;
    first = temp
  }
  return second
}

0

评论区