【笔试题】变态跳台阶
相关题目:
【笔试题】蜗牛爬井问题
【笔试题】变态跳台阶
问题描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
示例
输入:3
输出:4
分析1
这道题和前面的跳台阶有相似之处,之前的跳台阶是一次可以跳一阶或者两阶,那么跳n阶台阶的次数可以理解为跳n-1阶和跳n-2阶的次数之和。所以本题跳n阶的次数可以理解为跳n-1,n-2,n-3,…1的次数的总和加1,加1是因为可以一次跳上去。写出几次跳的个数可以发现1,2,4,8,16,32,…规律为后一个数是前一个数的二倍,所以代码也就比较简单了
代码1
int jumpFloorII(int number)
{
int sum=1;
if(number<=1)
return 1;
for(int i=2;i<=number;++i)
{
sum=sum*2;
}
return sum;
}
分析2
采用递归的思想:假定第一次跳的是1阶,那么剩下的是n-1个台阶,跳法是f(n-1);
假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2);
假定第一次跳的是3阶,那么剩下的是n-3个台阶,跳法是f(n-3);
…
假定第一次跳的是n-1阶,那么剩下的是1个台阶,跳法是f(1);
假定第一次跳的是n阶,那么剩下的是0个台阶,跳法是1种
根据上述分析可以得出:有1阶的时候可以有 f(1) = 1 =2^0种;
有2阶的时候可以有f(2) = 1+f(1)=2=2^1种;
有3阶的时候可以有 f(3) =1+f(2)+f(1)=4=2^2种;
…
有n-1阶的时候可以有 f(n-1) =1+f(n-2)+…+f(2)+f(1)=2^(n-2)种;
有n阶的时候可以有 f(n) =1+f(n-1)+f(n-2)+…+f(2)+f(1)=2^(n-1)种;
代码2
int jumpFloorII(int number)
{
return 1<<(number-1);
}