码迷,mamicode.com
首页 > 其他好文 > 详细

刷题10 变态跳台阶

时间:2017-12-22 19:43:05      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:乘法   推出   class   str   blog   floor   2-2   col   gpo   

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

 

思路:

从跳台阶问题就可以推出啊,

关于本题,前提是n个台阶会有一次n阶的跳法。分析如下:

 

f(0) = 1;

f(1) = 1;

f(2) = f(2-1) + f(2-2);         //f(2-2) 表示2阶一次跳2阶的次数。

f(3) = f(3-1) + f(3-2) + f(3-3);

...

f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(n-(n-1)) + f(n-n);  

 

说明: 

1)这里的f(n) 代表的是n个台阶有1,2,...n阶的跳法。

2) 由以上可知:

    f(n) = f(0) + f(1) + f(2) + f(3) + ... + f(n-2) + f(n-1);

    故f(n-1) = f(0) + f(1) + f(2) + f(3) + ... + f(n-2);

    所以 f(n) = f(n-1) + f(n-1) = 2 * f(n-1);

3) 可以知道有n阶台阶,有1、2、...n阶的跳的方式时,总共跳法为:

              | 1              ,(n=0 ) 

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

              | 2 * f(n-1) ,(n>=2)
接下来就可以写代码了:
 1 class Solution {
 2 public:
 3     int jumpFloorII(int number) {
 4         if(number < 2)
 5             return number;
 6         int first = 1;
 7         for(int i = 2; i <= number; i++)
 8             first = 2 * first;
 9         return first;
10     }
11 };

 

当然,乘法不如二进制移位快,这样就可以了:

1 class Solution {
2 public:
3     int jumpFloorII(int number) {
4         return 1 << --number;
5     }
6 };

 

刷题10 变态跳台阶

标签:乘法   推出   class   str   blog   floor   2-2   col   gpo   

原文地址:http://www.cnblogs.com/purehol/p/8087319.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!