<LeetCode OJ> Nim Game【292】

292. Nim Game

My Submissions

Question

Total Accepted: 30675 Total
Submissions: 61031 Difficulty: Easy

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.

Hint:

  1. If there are 5 stones in the heap, could you figure out a way to remove the stones such that you will always be the winner?

Credits:

Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.

Subscribe to see which companies asked this question

Show Similar Problems

//思路首先:将问题规模缩小,找规律:
//桌子上只有1个我必赢,2个我必赢,3个我必赢,4个我必输,5个我必赢,6个必赢,7个必赢
//8个,就是两个4,我第一轮无论怎么摸石头都能让对手最后(以4为一个坎)摸完石头,所以必输
//也就是说n%4==0必输了哦?最后试了一下,的确是这样的。
class Solution {
public:
    bool canWinNim(int n) {
        return n%4!=0;//卧槽,此题代码可以如此简单,意义何在?
    }
};
时间: 2024-12-21 20:39:24

<LeetCode OJ> Nim Game【292】的相关文章

&lt;LeetCode OJ&gt;Missing Number【268】

268. Missing Number My Submissions Question Total Accepted: 31740 Total Submissions: 83547 Difficulty: Medium Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array. For example, Given num

&lt;LeetCode OJ&gt;Next Permutation【31】

31. Next Permutation My Submissions Question Total Accepted: 54346 Total Submissions: 212155 Difficulty: Medium Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers. If such arrangement i

LeetCode:分发饼干【455】

LeetCode:分发饼干[455] 题目描述 假设你是一位很棒的家长,想要给你的孩子们一些小饼干.但是,每个孩子最多只能给一块饼干.对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸:并且每块饼干 j ,都有一个尺寸 sj .如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足.你的目标是尽可能满足越多数量的孩子,并输出这个最大数值. 注意: 你可以假设胃口值为正.一个小朋友最多只能拥有一块饼干. 示例 1: 输入: [1,2,3

LeetCode:寻找重复数【287】

LeetCode:寻找重复数[287] 题目描述 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数.假设只有一个重复的整数,找出这个重复的数. 示例 1: 输入: [1,3,4,2,2] 输出: 2 示例 2: 输入: [3,1,3,4,2] 输出: 3 说明: 不能更改原数组(假设数组是只读的). 只能使用额外的 O(1) 的空间. 时间复杂度小于 O(n2) . 数组中只有一个重复的数字,但它可能不止重复出现一次.

LeetCode:零钱兑换【322】【DP】

LeetCode:零钱兑换[322][DP] 题目描述 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输入: coins = [1, 2, 5], amount = 11 输出: 3 解释: 11 = 5 + 5 + 1 示例 2: 输入: coins = [2], amount = 3 输出: -1 说明:你可以认为每种硬币的数量是无限的. 题目分析 很显然,这是

LeetCode:螺旋矩阵【54】

LeetCode:螺旋矩阵[54] 题目描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,3,6,9,8,7,4,5] 示例 2: 输入: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] 输出: [1,2,3,4,8,12,11,10,9,5,6,7] 题目分析 这道题简直

LeetCode:全排列II【47】

LeetCode:全排列II[47] 参考自天码营题解:https://www.tianmaying.com/tutorial/LC47 题目描述 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ] 题目分析 这道题与上一道全排列I的区别在于,这一次给的序列可以包含重复元素. 1.那此时我们怎么判断当前元素是否使用过呢? 我们使用BitMap(位图)技术建立一个和序列长度相等的布尔数组,记录每

LeetCode:每日温度【739】

LeetCode:每日温度[739] 题目描述 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数.如果之后都不会升高,请输入 0 来代替. 例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]. 提示:气温 列表长度的范围是 [1, 30000].每个气温的值的都是 [30, 100] 范围内的整数. 题目分析 说实话,看到这

LeetCode:二进制手表【401】

LeetCode:二进制手表[401] 题目描述 二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59). 每个 LED 代表一个 0 或 1,最低位在右侧. 例如,上面的二进制手表读取 "3:25". 给定一个非负整数 n 代表当前 LED 亮着的数量,返回所有可能的时间. 案例: 输入: n = 1 返回: ["1:00", "2:00", "4:00", "8:00