剑指offer10 .高效率斐波那契数列,青蛙台阶问题,矩阵覆盖问题p74

mac2024-04-19  43

剑指offer10 . 高效率斐波那契数列,青蛙台阶问题,矩阵覆盖问题p74

//优化后的斐波那契 long long fb(int n) { if (n < 0) return -1; int table[2] = {0, 1}; if (n < 2) return table[n]; long long pre1 = 1, pre2 = 0, fbn = 0; for (int i = 2; i <= n; ++i) { fbn = pre1 + pre2; pre2 = pre1; pre1 = fbn; } return fbn; }

青蛙跳台阶(只能跳1,2步)

设f(n)表示青蛙跳上n级台阶的跳法数。当只有一个台阶时, n = 1时, 只有1中跳法; n = 2时,有两种跳法;; 当n很大时,青蛙在最后一步跳到第n级台阶时,有两种情况: 一种是青蛙在第n-1个台阶跳一个台阶,那么青蛙完成前面n-1个台阶,就有f(n-1)种跳法,这是一个子问题。 另一种是青蛙在第n-2个台阶跳两个台阶到第n个台阶,那么青蛙完成前面n-2个台阶,就有f(n-2)种情况,这又是另外一个子问题。 两个子问题构成了最终问题的解,所以当n>=3时,青蛙就有f(n)=f(n-1)+f(n-2)种跳法。

扩展 :如果一次可以跳1,2,3…n 级的话 f(n) = 2的n-1次方 证明: f(n) = f(n-1) + f(n-2) + f(n-3) …+f(n-n) 方程1 f(n-1) = f(n-2) + f(n-3) + f(n-4) …+f(n-n) 方程2 方程1-2得 : f(n) – f(n-1) = f(n-1) f(n) = 2f(n-1) = 22*f(n-2)=…2的n-1次方

p79 页的矩阵覆盖也是同样的道理,不再赘述(注意n是初始几个值0,1,2的特判)

最新回复(0)