您的位置:首页 > 其它

变态跳台阶,最终导向HDU_5698_瞬间移动

2016-05-24 16:42 281 查看
变态跳台阶

参与人数:8361时间限制:1秒空间限制:32768K
算法知识视频讲解


题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

法一:参考了/article/8380543.html

思路是先考虑一步到n级台阶有多少种方法,然后两步,三步。。一直到n步。。

每一个K步 就好像在n-1个盒子里 装k-1个球一样

class Solution {
public:
int zuheshu(int n,int m)
{
long long result=1;
if(n<m-n)
n=m-n;
for(int i=m;i>n;i--)
{
result *=i;
}
for(int i=m-n;i>0;i--)
{
result /=i;
}
return result;
}
int jumpFloorII(int number) {
int sum=0;
for(int i=1;i<=number;i++){
sum += zuheshu(number-i,number-1);
}
return sum;
}
};


方法二:把前面的各格子的方法数 累加然后再+1

class Solution {
public:
int a[1010];
int jumpFloorII(int number) {
init();
return a[number];
}
void init(){
a[1]=1;
a[2]=2;
for(int i=3;i<=1000;i++){
a[i] = 1;
for(int j=1;j<i;j++)
a[i] += a[j];
}
}
};


方法三: c(n-1,0)+c(n-1,1)+...+c(n-1,n-1)=2^(n-1) 绝了。。

然后,这个理由就是,每个格子都只能跳或者不跳,所以除了最后一个格子必跳外,前面的n-1个都各有两个状态,所以2^(n-1)

class Solution {
public:
int jumpFloorII(int number) {
int sum = 1;
for(int i=1;i<number;i++)
sum *=2;
return sum;
}
};
甚至!!!!

class Solution {
public:
int jumpFloorII(int number) {
return 1<<(number-1);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: