空间复杂度为 O(1) 的动态规划

上模版

  • 递推公式: f(n) = f(n-1) + f(n-2)
  • 递归退出条件:
      f(0) == 0
      f(1) == 1
      f(2) == 2
    即:
    if numbers < 3:
      return numbers
  • 转化为动态规划: 只需要 3 个变量
    # n >= 3
    # 答案, f(n-2), f(n-1)
    ans, f2, f1 = 0, 1, 2
    for index in range(3, numbers+1):
      ans = f1 + f2
      # 更新 f(n-1), f(n-2)
      f1, f2 = ans, f1

完整代码
Python3 实现

class Solution:
    def jumpFloor(self, number):
        if number < 3:
            return number
        # 答案, f(3-2), f(3-1)
        ans, f2, f1 = 0, 1, 2
        for i in range(3, number+1):
            ans = f1 + f2
            # 更新 f(n-1), f(n-2)
            f1, f2 = ans, f1
        return ans

Golang 实现

package main

/**
 * 
 * @param number int整型 
 * @return int整型
*/
func jumpFloor( number int ) int {
    if number < 3 {
        return number
    }
    var ans, f2, f1 int = 0, 1, 2
    for i:= 3; i <= number; i++ {
        ans = f1 + f2
        f1, f2 = ans, f1
    }
    return ans
}