題目描述
一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。
雖然一眼就看出來答案,但是還是被題目裏的“先後次序不同算不同的結果”給干擾了一下。居然沒有一眼看出來其實就是個斐波那契數列。orz
public class Solution {
public int JumpFloor(int target) {
if(target==1)return 1;
if(target==2)return 2;
return (JumpFloor(target-1)+JumpFloor(target-2));
}
}
再貼個別人的代碼吧
class Solution {
public:
int jumpFloor(int number) {
if (number <= 0) {
return 0;
}
if (number == 1) {
return 1;
}
if (number == 2) {
return 2;
}
int first = 1, second = 2, third = 0;
for (int i = 3; i <= number; i++) {
third = first + second;
first = second;
second = third;
}
return third;
}
};
雖然簡單也要一步一步積累
題目描述
一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
第一眼看題還真被難了一下,看了下評論恍然大悟這不就是數列嗎(摔)真的腦子退化了orz
因爲n級臺階,第一步有n種跳法:跳1級、跳2級、到跳n級
跳1級,剩下n-1級,則剩下跳法是f(n-1)
跳2級,剩下n-2級,則剩下跳法是f(n-2)
所以f(n)=f(n-1)+f(n-2)+...+f(1)
因爲f(n-1)=f(n-2)+f(n-3)+...+f(1)所以f(n)=2*f(n-1)
public class Solution {
public int JumpFloorII(int target) {
if (target <= 0) return -1;
if (target == 1) return 1;
return 2 * JumpFloorII(target - 1);
}
}
還有一題矩形覆蓋的和跳臺階其實一毛一樣,抽象分析問題的能力真是太重要了,感覺刷題有點浮躁