题目描述
一只青蛙一次可以跳上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);
}
}
还有一题矩形覆盖的和跳台阶其实一毛一样,抽象分析问题的能力真是太重要了,感觉刷题有点浮躁