《剑指offer》—9、变态跳台阶

 题目描述
9、一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

解题思路:
假设第一次跳上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级,即跳法f(0);(表示n阶一次跳n阶次数)。
所以f(n) = f(n-1) + f(n-2) + ... + f(1) + f(0); ①
简化公式,有上述知跳n-1级台阶:f(n-1) = f(n-2) + ... + f(1) + f(0); ②
由①、② 即可推导出 f(n) =  f(n-1) + f(n-1) = 2 * f(n-1);最终结论如下:

             | 1,             ( n=0 ) 

f(n) =    | 1,              ( n=1 )

             | 2 * f(n-1), ( n>=2 )

n级有2的n-1种跳法,即2^(n-1)种跳法为了加快运算速度,可通过向左移位来完成乘以2的工作。

参考代码:
/*************************************************
Copyright:牛客网在线编程《剑指offer》
Author:zhouyuan
Date:2017-02-27
Description:变态跳台阶
**************************************************/

class Solution {
public:
	int jumpFloorII(int number) {
		if (number <= 0) {
			return 0;
		}

		return 1 << --number;
	}
};

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值