剑指 Offer 10- II. 青蛙跳台阶问题

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

链接:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof

示例 1:
输入:n = 2
输出:2
示例 2:

输入:n = 7
输出:21
示例 3:

输入:n = 0
输出:1
提示:
0 <= n <= 100

思路:
(1)回溯(递归)
a. DP状态的定义: f(n)表示到底n阶的总走法个数
b. DP方程的推导:f(n) = f(n-1) + f(n-2) f(0) = f(1) = 1
(2)时间复杂度O(n) 空间复杂度O(1) for i-2 -->n
(3)log(n)解法.....

  1. 解法1
func numWays(n int) int {

    if n == 0 {
        return 1
    }
    if n == 1 || n == 2 {
        return n
    }
    mem := make([]int, n)
    mem[0] = 1;
    mem[1] = 2;
    for i := 2; i < n; i++ {
        mem[i] = mem[i-1] + mem[i-2]
        mem[i] %= 1000000007
    }

    return mem[n-1]
}
  1. 解法2
func numWays(n int) int {
    if n < 0 {
        return 0
    }
    if n == 0 {
        return 1
    }
    if n <= 2 {
        return n
    }
    res := 1
    pre := 1

    for i := 2; i <= n; i++ {
        pre, res = res, (res + pre) % 1000000007 
    }

    return res
}

你可能感兴趣的:(剑指 Offer 10- II. 青蛙跳台阶问题)