您的位置:首页 > Web前端

HUD_5686_Problem B 和 牛客网《剑指offer》跳台阶

2016-05-24 16:04 513 查看
跳台阶

参与人数: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

Output

对于每组测试数据,输出一个整数,代表由题目中所给定的全1序列所能形成的新序列的数量。

Sample Input

1
3
5


Sample Output

1
3
8

Hint
如果序列是:(111)。可以构造出如下三个新序列:(111), (21), (12)。


Source

2016"百度之星"
- 资格赛(Astar Round1)

Recommend

liuyiding

一个意思。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: