LeetCode 292. Nim Game 题解(C++)
来源:互联网 发布:北京工业软件开发 编辑:程序博客网 时间:2024/06/03 15:02
LeetCode 292. Nim Game 题解(C++)
题目描述
You are playing the following Nim Game with your friend: There is a heap of stones on the table, each time one of you take turns to remove 1 to 3 stones. The one who removes the last stone will be the winner. You will take the first turn to remove the stones.
Both of you are very clever and have optimal strategies for the game. Write a function to determine whether you can win the game given the number of stones in the heap.
示例
- For example, if there are 4 stones in the heap, then you will never win the game: no matter 1, 2, or 3 stones you remove, the last stone will always be removed by your friend.
思路
超时解法
- 看到这道题的第一想法是使用递归进行解答,在确定了stone数为1,2,3,5,6,7时都能赢得游戏,stone数为4时游戏会输后,在递归函数的入口进行了判断
- 接下来,分别对取1,2,3块石头的情况进行递归,所得的bool值是对方能不能取胜的结果,所以需要进行取反
- 使用上述算法submit的结果是在n=35时超时
最佳解法
- 其实这道题是有规律的,在n分别为1,2,3时胜利,n等于4时失败,当n分别为5,6,7时,此时你只需取1,2,3块stone,则对方取时n都为4,此时对方失败;同理,当n等于8时,无论你取1,2,3块stone,对方都可以在7,6,5块stone里取,按照上面的推理,此时对方胜利…接下去可推得只要n为4的倍数,对方就取得胜利,否则我方获得胜利,所以这道题只需要一行代码便可以解决。
代码
超时解法
class Solution {public: bool canWinNim(int n) { if (n <= 3 || n == 5 || n == 6 || n == 7) { return true; } if (n == 4) { return false; } bool takeOne = canWinNim(n - 1); bool takeTwo = canWinNim(n - 2); bool takeThree = canWinNim(n - 3); return (!takeOne) || (!takeTwo) || (!takeThree); }};
最佳解法
class Solution {public: bool canWinNim(int n) { return (n % 4 != 0); }};
0 0
- LeetCode 292. Nim Game 题解(C++)
- leetcode 292. Nim Game 题解
- Leetcode 292. Nim Game 题解
- LeetCode题解:Nim Game
- LeetCode题解:Nim Game
- leetcode 292. Nim Game(C语言)
- Leetcode题解15 292. Nim Game
- LeetCode Algorithms 292. Nim Game 题解
- LeetCode 题解(275) : Nim Game
- LeetCode 292: Nim Game 题解
- LeetCode 292. Nim Game C语言
- 【LeetCode-292】 Nim Game(C++)
- [LeetCode-292]Nim Game(c++)
- 292. Nim Game (C++)
- [leetcode] 292.Nim Game
- 【LeetCode】292.Nim Game
- leetcode:292. Nim Game
- leetCode 292. Nim Game
- so文件格式详解
- 2016某知名互联网公司PHP面试题及答案
- 在Java中编写完美的equals方法
- 第5周 项目1-建立顺序栈算法库
- 将Eclipse代码导入到AndroidStudio的两种方式
- LeetCode 292. Nim Game 题解(C++)
- SVM-支持向量机算法概述
- poj Pie 二分
- 重构-改善既有的代码设计(三)
- iOS10 去掉导航栏分割线
- 18-线性地址转换实验
- 职业生涯规划——从参加宣讲会开始吧
- 根据键盘录入的值输出相应的星型图案
- 优秀程序员的45个习惯