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

跳台阶

题目描述

一只青蛙一次可以跳上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序列的长度。

1N200
 

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

Sample Input
    
    
1 3 5
 

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

Source
 

Recommend
liuyiding

一个意思。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值