跳台阶
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
解:
设f(n)为跳上n级台阶的总跳法数
假设青蛙跳上n级台阶的最后一跳只跳了一级,那么f(n) = f(n - 1);
假设青蛙跳上n级台阶的最后一跳只跳了二级,那么f(n) = f(n - 2);
那么跳上n级台阶的总跳法数应该为:f(n) = f(n - 1) + f(n - 2);
同理,可求的f(n - 1) ... f(n - 2) ... ...f(3)...
当n <= 2 时:f(1) = 1; f(2) = 2;
通过叠加就能求出答案。
class Solution {
public:
int jumpFloor(int number) {
int first = 1;
int second = 2;
int ans = 0;
if(number == 1)
{
ans = 1;
}
if(number == 2)
{
ans = 2;
}
for(int i = 3; i <= number; i++)
{
ans = first + second;
first = second;
second = ans;
}
return ans;
}
};
变台跳台阶
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解:
如果能理解上一种做法,那么该题也变简单了。
设f(n)为跳上n级台阶的总跳法数,
当n >= 2时:
f(n) = f(n - 1) + f(n - 2) + f(n - 3) + ...... + f(2) + f(1) + 1;
最后的1代表的是一下跳n级台阶的跳法数。
class Solution {
public:
int jumpFloorII(int number) {
int first = 1;
int second = 2;
int ans = 0;
if(number == 1)
ans = 1;
if(number == 2)
ans = 2;
int total = first + second;
for(int i = 3; i <= number; i++)
{
ans = total + 1;
total += ans;
}
return ans;
}
};