跳台阶
- 参与人数:10695时间限制:1秒空间限制:32768K
- 算法知识视频讲解
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
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 jumpFloor(int number) {
int sum = 0;
for(int i=0;i<=number/2;i++)
sum += zuheshu(i,number-i);
return sum;
}
};
其中走k个两步,就是,k个2 和n-2k个1,的排列组合,所以是C(k,n-k);
后来发现比这个方法更简单的方法。
n=1 有一种方法
n=2 11,2 两种
n=3 111,12,21,三种
。。。。。。正好是前一个格子的方法数+前一个的前一个格子的方法数 = 这个格子的方法数,因为前一个格子的所有方法,再走一步,前一个的前一个的所有方法,走两步。
所以居然变成了斐波那契数列。。。。。。
class Solution {
public:
int jumpFloor(int number) {
if(number==1)
return 1;
if(number==2)
return 2;
if(number==3)
return 3;
int a=1;
int b=2;
int c=3;
for(int i=4;i<=number;i++)
{
a=b;
b=c;
c=a+b;
}
return c;
}
};
再来一个类似的题。
Problem B
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 437 Accepted Submission(s): 157
Problem Description
度熊面前有一个全是由1构成的字符串,被称为全1序列。你可以合并任意相邻的两个1,从而形成一个新的序列。对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列。
Input
这里包括多组测试数据,每组测试数据包含一个正整数
N
,代表全1序列的长度。
1≤N≤200
1≤N≤200
Output
对于每组测试数据,输出一个整数,代表由题目中所给定的全1序列所能形成的新序列的数量。
Sample Input
1 3 5
Sample Output
1 3 8Hint如果序列是:(111)。可以构造出如下三个新序列:(111), (21), (12)。
Source
Recommend
liuyiding
一个意思。。。。