动态规划:青蛙跳台阶、变态跳台阶
来源:互联网 发布:java汽车租赁项目 编辑:程序博客网 时间:2024/06/06 01:47
青蛙跳台阶问题是一个简单的动态规划问题。
问题1:普通跳台阶
一只青蛙可以一次跳 1 级台阶或者一次跳 2 级台阶,例如:
- 跳上第 1 级台阶只有一种跳法:直接跳 1 级即可。
- 跳上第 2 级台阶有两种跳法:每次跳 1 级,跳两次;或者一次跳 2 级。
问要跳上第
很多人喜欢正向思考,使用暴力求解,但往往这是一个很复杂的问题。我们可以反过来思考:
如果我们要跳上第
我们令
是不是很熟悉,它不就是斐波那契数列吗,代码就很简单啦:
int jumpFloor(int number) { int g = 1, f = 2; while (number-- > 1) { f += g; g = f - g; } return g;}
问题2:变态跳台阶
变态跳台阶问题是这样的:如果青蛙可以一次跳 1 级,也可以一次跳 2 级,一次跳 3 级,…,一次跳
同样的,我们采用逆向思维,将问题改为:跳上第
要跳上第
同时,
所以,由上面两个公式可知:
即:
因为
代码如下:
int square(int a) { return a * a; }int power2(int n) { // 计算2的n次方 if (0 == n) return 1; return n % 2 ? square(power2(n>>1))<<1 : square(power2(n>>1));}int jumpFloorII(int number) { return power2(number - 1);}
0 0
- 动态规划:青蛙跳台阶、变态跳台阶
- 青蛙变态跳台阶
- 青蛙变态跳台阶
- 青蛙变态跳台阶
- 青蛙变态跳台阶
- 青蛙跳台阶,变态跳台阶问题
- 青蛙跳台阶/变态跳台阶问题
- 8.变态青蛙跳台阶
- 动态规划10:变态跳台阶
- 青蛙跳台阶、变态跳台阶、矩形覆盖
- 青蛙跳台阶改良版:变态跳台阶
- 剑指offer-青蛙变态跳台阶
- 剑指offer之青蛙变态跳台阶
- C++,剑指offer青蛙变态跳台阶
- 跳台阶 && 变态跳台阶
- 跳台阶问题 + 变态跳台阶问题 解法(动态规划递归 + 非递归)
- 变态跳台阶
- 变态跳台阶
- 欢迎使用CSDN-markdown编辑器
- ZOJ 3768Continuous Login
- 【C++】并发编程入门
- 几分钟走进神奇的光流|FlowNet 2.0: Evolution of Optical Flow Estimation with Deep Networks
- 线程的优先级
- 动态规划:青蛙跳台阶、变态跳台阶
- JavaSE入门学习51:多线程编程(二)
- 206. Reverse Linked List
- ISBN号码
- 经典面试题——赋值运算符的重载
- iOS开发本地通知(每天定点发送消息推送)
- QTable Widget
- Android OnClickListener 使用总结
- spark在windows本地调试