先列举一个表格
1 2 3 4 5
1 2 4 8 16
我们可以看出一个规律,就是每一个最新的n都是前n-1项的加和在加1,从逻辑的角度上也可以解释的通,加的那个1就是直接跳n级台阶,那为什么加上前面的n-1项呢,因为你想跳到第n级从第几级跳都有可能,所以把前面所有的都加上在加一个从第0级跳的数目1就是最终结果了,但是打表之后看到的结果就是2的多少次方,我们可以用一个最粗暴的方法就是直接返回2的阶乘就ok了.
#include "iostream"
#include "stdio.h"
using namespace std;
class Solution {
public:
int jumpFloorII(int number) {
int i,j;
for(i=0;i<50;i++)
num[i] = 0;
num[0] = 0;
num[1] = 1;
for(i=2;i<50;i++)
{
for(j=0;j<i;j++)
{
num[i] += num[j];
}
num[i]+=1;
}
return num[number];
}
public:
int num[50];
};
int main()
{
Solution test;
int result;
result = test.jumpFloorII(5);
cout<<result<<endl;
return 0;
}