【Leetcode】292. Nim Game
2017-02-18 10:04
381 查看
思路:
1个石子,先手全部拿走;2个石子,先手全部拿走;3个石子,先手全部拿走;4个石子,后手面对的是先手的第1,2,3情况,后手必胜;5个石子,先手拿走1个让后手面对第4种情况,后手必败;6个石子,先手拿走2个让后手面对第4种情况,后手必败;7个石子,先手拿走3个让后手面对第4种情况,后手必败。
当n∈[1,3]时,先手必胜。当n == 4时,无论先手第一轮如何选取,下一轮都会转化为n∈[1,3]的情形,此时先手必负。当n∈[5,7]时,先手必胜,先手分别通过取走[1,3]颗石头,可将状态转化为n == 4时的情形,此时后手必负。当n == 8时,无论先手第一轮如何选取,下一轮都会转化为n∈[5,7]的情形,此时先手必负。
容易看出来,只有当出现了4的倍数,先手无可奈何,其余情况先手都可以获胜。(石子数量为4的倍数)后手的获胜策略十分简单,每次取石子的数量,与上一次先手取石子的数量和为4即可;(石子数量不为4的倍数)先手的获胜策略也十分简单,每次都令取之后剩余的石子数量为4的倍数(4*0=0,直接拿光),他就处于后手的位置上,利用上一行的策略获胜
Runtime:1ms
1个石子,先手全部拿走;2个石子,先手全部拿走;3个石子,先手全部拿走;4个石子,后手面对的是先手的第1,2,3情况,后手必胜;5个石子,先手拿走1个让后手面对第4种情况,后手必败;6个石子,先手拿走2个让后手面对第4种情况,后手必败;7个石子,先手拿走3个让后手面对第4种情况,后手必败。
当n∈[1,3]时,先手必胜。当n == 4时,无论先手第一轮如何选取,下一轮都会转化为n∈[1,3]的情形,此时先手必负。当n∈[5,7]时,先手必胜,先手分别通过取走[1,3]颗石头,可将状态转化为n == 4时的情形,此时后手必负。当n == 8时,无论先手第一轮如何选取,下一轮都会转化为n∈[5,7]的情形,此时先手必负。
容易看出来,只有当出现了4的倍数,先手无可奈何,其余情况先手都可以获胜。(石子数量为4的倍数)后手的获胜策略十分简单,每次取石子的数量,与上一次先手取石子的数量和为4即可;(石子数量不为4的倍数)先手的获胜策略也十分简单,每次都令取之后剩余的石子数量为4的倍数(4*0=0,直接拿光),他就处于后手的位置上,利用上一行的策略获胜
public class Solution { public boolean canWinNim(int n) { if (n % 4 == 0) return false; else return true; } }
Runtime:1ms
相关文章推荐
- LeetCode 292. Nim Game
- leetcode--292. Nim Game
- LeetCode [292. Nim Game] 难度[easy]
- LeetCode 292. Nim Game
- LeetCode 292. Nim Game
- leetcode_292. Nim Game ? 待解决
- 【leetcode】292. Nim Game
- LeetCode 292. Nim Game
- leetcode/292. Nim Game
- [leetcode]: 292. Nim Game
- Leetcode: 292. Nim Game (Java)
- leetcode292. Nim Game
- LeetCode 292. Nim Game
- leetcode 292. Nim Game
- LeetCode 292. Nim Game
- Leetcode 292. Nim Game
- leetcode 292. Nim Game
- [Leetcode] 292. Nim Game
- 菜鸟写给菜鸟的 ——LeetCode解题笔记 Easy-题目1:292. Nim Game
- LeetCode 292. Nim Game