剑指offer_编程题_变态跳台阶
其他
2020-04-27 18:39:14
阅读次数: 0
- 青蛙可以跳任意级台阶
若青蛙要跳上第n级台阶,可以从任意i(i<n)级台阶跳至第n级
即 f(n) = f(n-1) + f(n-2) + … + f(1) + f(0)class Solution {
public:
int jumpFloorII(int number) {
if(number == 0)
return 1;
int countjump = 0;
while(number>0)
{
countjump += jumpFloorII(number-1);
number--;
}
return countjump;
}
};
- 对于任意i(i<n)级台阶,递归计算需要对i级台阶重复计算
可以对已经计算出的前i级台阶跳法保存,进而获得第n级台阶的跳法class Solution {
public:
int jumpFloorII(int number) {
int N=0;
std::vector<int> restemp;
restemp.push_back(1);
while(N<number)
{
int sumtemp = 0;
for (int i = 0; i < restemp.size(); ++i)
{
sumtemp += restemp.at(i);
}
restemp.push_back(sumtemp);
N++;
}
return restemp.back();
}
};
- 对于第i级台阶的跳法f(i),f(i) = f(i-1) + … + f(1) + f(0)
那么有 f(i+1) = f(i) + f(i-1) + … + f(1) + f(0) = 2 * f(i)
f(1) = 1,f(i) = 1 * 2(i-1)#include <math.h>
class Solution {
public:
int jumpFloorII(int number) {
return pow(2,number-1);
}
};
发布了80 篇原创文章 ·
获赞 18 ·
访问量 1万+
转载自blog.csdn.net/C_abua/article/details/105662675