感到智商不足了

Coding Pratice

Posted by Jayn on April 4, 2016

题目

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

我的解法

问题看起来很easy嘛,直接开撸 用$f(n)$表示n个台阶时的跳法,那么很容易写出表达式:

class Solution {
public:
    int jumpFloorII(int number) {
        
        int result=0;
        if(number==0)return 0;
        if(number==1)return 1;
         
        vector<int> container;
        container.push_back(0);
        container.push_back(1);
         
        //get the f(0) to f(n-1)
        for(int i=2;i<number;i++){
            int tmp=0;
            for(int j=0;j<i;j++){
                tmp+=container[j];
            }
            container.push_back(tmp+1);
        }
        
        for(int i=0;i<number;i++){
            result+=container[i];
        }
        return result+1;
    }
};

但是我看到了一个更吊的代码,只用一行就搞定了:

class Solution {
public:
    int jumpFloorII(int number) {
       return  1<<--number; 
    }
};

刚刚看到这行代码的时候,一口老血要吐出来了,这不是藐视我的智商啊。。 其实,写出了上面的公式,再仔细整理一下就可以得出如下关系式:

看来还是高中数列没学好啊。以后要多注意观察啊,不然吭哧吭哧写这么多代码,人家一行就搞定了,真是个忧伤的故事。