题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。
题解1:动态规划
当n = 1, f(1) = 1 = 2^0;
当n = 2, f(2) = 2 = 2^1;
当n = 3, f(3) = 4 =2^2 = f(2)+f(1)+1;
当n = 4, f(4) = 8 =2^3 = f(3)+f(2)+f(1)+1;
当n > 2, f(n) = 2^(n-1) =f(n-1)+f(n-2) +···+ f(2)+f(1)+1;
代码
class Solution {
public:
int jumpFloorII(int number) {
//题解1:动态规划
if(number <=2) return number;
int a = 1;
int b = 2;
int sum = a * b;
for(int i =2;i<number;i++){
sum<<2;//sum = sum * 2
}
return sum;
}
};
题解2:数学规律
当n = 1, f(1) = 1 = 2^0;
当n = 2, f(2) = 2 = 2^1;
当n = 3, f(3) = 4 =2^2 = f(2)+f(1)+1;
当n = 4, f(4) = 8 =2^3 = f(3)+f(2)+f(1)+1;
当n > 2, f(n) = 2^(n-1) =f(n-1)+f(n-2) +···+ f(2)+f(1)+1;
代码
class Solution {
public:
int jumpFloorII(int number) {
//题解2:规律
if(number == 0) return 0;//可忽略,题目中n>=0
return pow(2, number-1);
}
};