10-03 变态跳台阶(斐波那契数列的应用)
题目描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解题思路:
找出结果与n的规律:
-- 直接写几个n(=0/1/2/3/4/5/6),可以观察到f(n)=2^(n-1)
-- 每个台阶都有跳与不跳两种情况(除了最后一个台阶),最后一个台阶必须跳。所以共用2^(n-1)中情况
-- 推导:
因此问题转化为怎么求解f(n)=2^(n-1)
代码1: 循环直接求解:
class Solution { public: int jumpFloorII(int number) { if(number<=0) return 0 ; long long numJump = 1; for(int i=1;i<number;i++){ numJump = numJump*2; } return numJump; } };
代码2: 用位移操作求解,更快
class Solution { public: int jumpFloorII(int number) {
if(number<=0)return 0; int a=1; return a<<(number-1); //左移位 } };