剑指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次方。
}
};
思路:其实是隔板问题,假设有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次方。
}
};
相关文章推荐
- 剑指offer 变态跳台阶
- 【剑指offer】9变态跳台阶
- 剑指offer面试题[9-2]-变态跳台阶
- 剑指offer — 变态跳台阶
- 剑指offer-9.变态跳台阶
- 剑指offer面试题之变态跳台阶
- [牛客网,剑指offer,python] 变态跳台阶
- 剑指offer--变态跳台阶
- 剑指offer(六)之变态跳台阶
- 剑指offer之跳台阶&变态跳台阶
- 剑指offer---变态跳台阶
- [剑指Offer]2.变态跳台阶
- python刷题日记:剑指offer-变态跳台阶
- [牛客网,剑指offer,python] 变态跳台阶
- 剑指offer之面试题9-3:变态跳台阶
- 剑指Offer:变态跳台阶(一刷)
- 剑指offer——变态跳台阶
- 剑指offer :变态跳台阶
- [牛客网,剑指offer,python] 变态跳台阶
- 牛客网-剑指offer-09-变态跳台阶