爬梯子

一、题目
在这里插入图片描述
二、思路
假如有n阶台阶需要你进行攀爬,每次有且仅能爬1或2个台阶,求有多少种方法。这个题目可以认为是在p次执行步骤里,有k次选择爬2个台阶,然后求有多少种组合方式,是一个排列组合问题。因此我们需要先确定执行步骤的上下限,即p的最大值和最小值,以及两种最值情况下,1和2的数量。然后我们发现,每当选择爬2个台阶的步骤被替换为爬1个台阶后,p值会发生变化,即k–,p++;然后依托排列组合公式,得出每一个p值情况下,k次选择爬2个台阶的组合方式的数目,接着对所有的组合数目求和即可。

三、题解

class Solution {

public:
int Count(int p,int t){
   long long r=1;
  int z,i=1,b;
 if(t==0) return 1;
  else
 {
    if(t<=p/2)
    {
  z=t;
    }
    else{
      z=p-t;
}
    b=z;
     while(z>0)
  {
if(i<=b)
    {
      r=r*p/i;
 p--;   
     z--;
      i++;  }
       else
       {
    r=r*p;
     p--;   
   z--;
       }
  }      
  }    
 return r;}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值