您的位置:首页 > Web前端

剑指offer之变态跳台阶

2018-03-28 14:01 232 查看
问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级,3级……n级台阶,求该青蛙跳上一个n级台阶总共有多少种跳法。
思路:其实是隔板问题,假设有n个台阶,有n-1个空隙,可以用0~n-1个隔板隔开,则种方法有:C(n-1,0)+C(n-1,1)+C(n-1,2)+……+C(n-1,n-1) = 2^(n-1) ,即2的n-1次方。其中C表示组合。更简单的方式是用位移,因为每向左移一位就相当于乘以2。
具体代码:(C++)
1:
class Solution
{
public:
        int jumpFloorII(int num)

        {

                int jump_num = 1;

                for(int i=0; i< num -1;i++)
                {

                        jump_num  = jump_num*2;
                }

                return jump_num;

        }

};

2.用位移的方式: (位移运算比乘法运算快,所以该方法更优)
class Solution
{
public:
    int jumpFloorII(int num)

    {

        return  1<<(--num);    //将1左移num-1位,即1乘以2的num-1次方。

    }

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: