爬楼梯

// 递归+缓存
func climbStairs(n int) int {
    if n == 1 {
        return 1
    }
    if n == 2 {
        return 2 
    }
  dp := make([]int, n )
  var recursion func(i int) int
  recursion = func(i int) int {
      // 结束条件
      if i == 0 {
          return  1
      }
      if i == 1 {
        return 2 
     }
    // 缓存
    if dp[i] != 0 {
        return dp[i]
    }
    // 当前层
    dp[i] = recursion(i-1) + recursion(i-2)
    return dp[i]
  }
  recursion(n-1)
  return dp[n-1]
}


func climbStairs(n int) int {
    if n == 1 {
        return 1
    }
    if n == 2 {
        return 2 
    }
  dp := make([]int, n )
    dp[0] = 1
    dp[1] =2 
  for i := 2; i < n ; i ++ {
      dp[i] = dp[i-1] + dp[i-2]
  }
    return dp[n-1]
}
// 最简单的方式
func climbStairs(n int) int {
    if n == 1 {
        return 1
    }
    if n == 2 {
        return 2 
    }
    f1 := 1
    f2 := 2
    f3 := f1 + f2 
    for i := 3; i <= n ; i ++ {
        f3 = f1 + f2 
        f1, f2 = f2, f3 
    }

    return f3 
}






Last updated

Was this helpful?