Description
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
Solution 1: Dynamic Programming
延续跳台阶的思路,我们仍然可以用DP解决这道题。
//C++
int jumpFloorII(int number) {
int* dp = new int[number+1];
dp[0] = 1;
for(int i = 1; i < number + 1; ++i){
dp[i] = 0;
for(int j = 0; j < i; ++j){
dp[i] += dp[j];
}
}
int ans = dp[number];
delete[] dp;
return ans;
}
Solution 2: Sum
既然上面的算法是对i之前的所有元素求和,我们可以预先算出通项公式,这样就可以用O(1)的时间得到答案。
观察,发现其实每一项就是2^n,(数归可以证明正确性)所以位运算即可得到答案。
//C++
int jumpFloorII(int number) {
return 1 << (--number);
}