变态跳台阶

来源:互联网 发布:c 并发编程实战 下载 编辑:程序博客网 时间:2024/04/28 22:57

时间限制:1秒空间限制:32768K
通过比例:35.42%
最佳记录:0 ms|8552K (来自 烧包谷)
题目描述

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

一般解法:
f(n) = f(n-1) + f(n-2) + ··· + f(1) + 1;
令dec = f(n-1); sum = f(n-2) + ··· + f(1) + 1;
通过
1.sum += dec;
2.dec = sum;
3.f(n+1) = dec + sum;
迭代求解:

class Solution {public:    int jumpFloorII(int number) {        int sum = 0, dec;        if( number == 1) {            return 1;        }        else if(number == 2) {            return 2;        }        else if(number == 3) {            return 4;        }        for(int i = 3; i <= number; i++) {            if(i == 3) {                sum = 2;                dec = 2;            }            else {                sum += dec;                dec = sum;                }        }        return sum + dec;    }};

最优解:
可以看到其实dec == sum,故此:利用指数函数 pow(x, y) = x ^ y
解法如下:

class Solution {public:    int jumpFloorII(int number) {        return pow(2, number -1);    }};
0 0
原创粉丝点击