面试题之硬币排成线java极简解法
来源:互联网 发布:yii2框架源码pdf 编辑:程序博客网 时间:2024/05/20 19:15
问题描述:有 n
个硬币排成一条线。两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止。拿到最后一枚硬币的人获胜。
请判定 第一个玩家 是输还是赢?
该题为一道典型的动态规划题,但此处将描述一种递归的极简的算法。
题目中给出的测试用例如下:
n = 1
, 返回 true
.
n = 2
, 返回 true
.
n = 3
, 返回 false
.
n = 4
, 返回 true
.
n = 5
, 返回 true
.
5
, 返回 true
,第二个玩家必赢;假设第一个玩家拿走了两个硬币,则对于第二个玩家还剩四个硬币,由于n = 4
, 返回 true
,则第二个玩家必赢。因此n =6时 返回 false
.依次类推,第一个玩家的输赢结果应该是周期为3的循环。所以代码如下:public class Solution { public boolean firstWillWin(int n) { if (n % 3 == 0) { return false; } else return true; }}
该方法用数学的方式解决了动态规划过程中面临的繁琐的问题。
2 0
- 面试题之硬币排成线java极简解法
- LintCode-硬币排成线
- 硬币排成线
- 硬币排成线 II
- 硬币排成线 III
- LintCode : 硬币排成线
- LintCode_394_硬币排成线
- 硬币排成线
- 硬币排成线 II
- 硬币排成线
- 硬币排成线
- Lintcode 硬币排成线
- 硬币排成线-LintCode
- 硬币排成线I和硬币排成线II问题
- LintCode-硬币排成线 III
- LintCode-硬币排成线 II
- lintcode-硬币排成一条线
- LintCode :硬币排成线 II
- iOS 数组越界处理方法总结
- jquery 动态创建元素
- python中几个不太熟的关键字:assert exec lambda
- java中&& 、|| 操作的捷径
- Activity的LaunchMode应用场景思考
- 面试题之硬币排成线java极简解法
- 人脸验证 DeepID 算法介绍及实战
- 黑马程序员——枚举学习笔记
- oracle表空间查询语句
- Android Camera API2中采用CameraMetadata用于从APP到HAL的参数交互
- 数据类型转字符串及CString与其他数据类型的转换
- 正计时与倒计时
- HTML第一课
- Android Camera HAL V3 Vendor Tag及V1,V3参数转换