劍指offer 跳台階

2021-08-25 22:30:11 字數 1276 閱讀 7771

1、

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

解題思路:

這個問題是典型的斐波那契數列,只是第乙個是1,第二個是2,其他的與上篇一樣。

令 f(n)f(n) 表示從第一級台階跳上第 nn 級台階有幾種跳法。則有如下遞推公式: 

f(n)=f(n−1)+f(n−2)

**如下:

//動態規劃

class solution

return last;}};

2、**跳台階

乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。

解題思路:逆向思維

假設要跳上第n個台階,它可以選擇從n-1、n-2... 1、0上跳上來

即f(n)=f(n-1)+f(n-2)+...+f(2)+f(1)+f(0);

同理,f(n-1)=f(n-2)+...+f(1)+f(0)

f(2)=f(1)+f(0);

f(1)=1; f(0)=0;

故f(n)=2 f(n-1)=2^2 f(n-2)=...=2^n-1 f(1)

**如下:

注意:答案不要溢位,雖然不用處理但是在面試時要考慮溢位的問題並說明。

class solution

};考慮越界問題:

//自底向上的動態規劃

//**n階跳

unsigned long long solution(int number)

//題目保證 number 最大為100

static unsigned long long counter[101] = ;

counter[0] = 1;

counter[1] = 1;

counter[2] = 2;

static int calculatedindex = 2;

if(number <= calculatedindex)

return counter[number];

//防止下標越界

if(number > 100)

number = 100;

for(int i = calculatedindex + 1; i <= number; i++)

counter[i] = 2 * counter[i - 1];

calculatedindex = number;

return counter[number];

劍指offer 跳台階

跳台階1 題目 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。思路 遞迴思想 可以理解為前面m步的情況加上最後一步的情況,前面m步理解為,m 1步加上最後一步的情況。最後一步分為2中情況,上1級和上2級。如下 class solution 跳台階2 題目 ...

劍指Offer 跳台階

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 解析 當青蛙到到n級時,有兩種跳法,一種是從n 1級跳1級,還有種是n 2跳2級 f n f n 1 f n 2 大家對這個公式是不是很熟悉,對,是斐波那契數列。所以這是一道動態規劃的問題。斐波那契數列,只能上...

劍指Offer 跳台階

author tom qian email tomqianmaple outlook.com github date 2017年8月10日 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。思路 首先窮舉一下到達最後一級台階的情況,分析最後到達是一步還是兩步。...