1. 程式人生 > >劍指offer之變態跳臺階

劍指offer之變態跳臺階

問題描述

一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。

求解思路

該題目肯定不能用遞迴求解和組合路徑的方式。結合前一個題目的斐波那契思想,我們需要寫出遞推表示式: 假設f(n)f(n)是走到第nn個臺階花費的步數,那麼前一個臺階號總共有n1n-1中可能 (1)f(n)=f(n1)+f(n2)++f(2)+f1f(n)=f(n-1)+f(n-2)+\cdots+f(2)+f1 \tag{1} 同樣的: (2)f(n1)=f(n2)+f

(n3)++f(2)+f1f(n-1)=f(n-2)+f(n-3)+\cdots+f(2)+f1 \tag{2} (2)(1)f(n)=2×f(n1)(2)-(1)\Rightarrow f(n)=2\times f(n-1)

本質上是一個動態規劃!!

程式碼例項

class Solution {
  public:
    int jumpFloorII(int number) {
        if(number == 1) {
            return 1;
} int n = 1; for(int i = 2; i <= number; ++i) { n *= 2; } return n; } };