ToB企服应用市场:ToB评测及商务社交产业平台
标题:
LeetCode题练习与总结:Nim 游戏--292
[打印本页]
作者:
曹旭辉
时间:
2024-10-12 12:41
标题:
LeetCode题练习与总结:Nim 游戏--292
一、题目形貌
你和你的朋友,两个人一起玩 Nim 游戏:
桌子上有一堆石头。
你们轮流进行自己的回合,
你作为先手
。
每一回合,轮到的人拿掉 1 - 3 块石头。
拿掉最后一块石头的人就是获胜者。
假设你们每一步都是最优解。请编写一个函数,来判定你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false 。
示例 1:
<strong>输入:</strong>n = 4
<strong>输出:</strong>false
<strong>解释:</strong>以下是可能的结果:
1. 移除1颗石头。你的朋友移走了3块石头,包括最后一块。你的朋友赢了。
2. 移除2个石子。你的朋友移走2块石头,包括最后一块。你的朋友赢了。
3.你移走3颗石子。你的朋友移走了最后一块石头。你的朋友赢了。
在所有结果中,你的朋友是赢家。
复制代码
示例 2:
<strong>输入:</strong>n = 1
<strong>输出:</strong>true
复制代码
示例 3:
<strong>输入:</strong>n = 2
<strong>输出:</strong>true
复制代码
提示:
1 <= n <= 2^31 - 1
二、解题思路
Nim游戏的胜利策略是基于数学的。当石头数量为4的倍数时,无论你怎样取石头,你的对手都可以通过取走剩余石头数量减去4的倍数的石头来确保终极获胜。因此,如果你面对的是4的倍数个石头,你将会输掉游戏。反之,如果你面对的不是4的倍数个石头,你可以通过取走肯定数量的石头,使得剩下的石头数量成为4的倍数,从而确保自己终极获胜。
详细来说,如果 n % 4 != 0,那么你可以通过取走 n % 4(1、2、或3块石头)来使得剩下的石头数量为4的倍数,如许无论对手怎样取石头,你都可以在接下来的回合中继续保持这种上风,直到赢得游戏。
三、详细代码
class Solution {
public boolean canWinNim(int n) {
// 如果石头数量不是4的倍数,则可以赢得游戏
return n % 4 != 0;
}
}
复制代码
这段代码非常简洁,只需要判定石头数量是否为4的倍数即可。如果不是,返回 true 表现可以赢得游戏;如果是,返回 false 表现无法赢得游戏。
四、时间复杂度和空间复杂度
1. 时间复杂度
该函数 canWinNim 仅包含一个操作,即对输入参数 n 进行取模运算 n % 4。取模运算的时间复杂度是常数时间复杂度,记作 O(1)。
因此,整个函数的时间复杂度也是 O(1)。
2. 空间复杂度
该函数 canWinNim 没有使用任何额外的数据结构,如数组、列表、栈、队列等,也没有递归调用或分配额外的内存空间。它只使用了固定数量的几个变量(n 和返回值),这些变量所占用的空间不会随着输入数据的巨细而变革。
因此,该函数的空间复杂度是 O(1)。
综上所述,canWinNim 函数的时间和空间复杂度都是 O(1)。
五、总结知识点
类界说(Class Definition)
:class Solution { ... }: 界说了一个名为 Solution 的类。
访问修饰符(Access Modifiers)
:public: 表现方法可以被任何其他类访问。
方法界说(Method Definition)
:public boolean canWinNim(int n) { ... }: 界说了一个名为 canWinNim 的公共方法,该方法接受一个整数参数 n 并返回一个布尔值。
方法返回类型(Return Type)
:boolean: 指定方法返回一个布尔类型的值。
参数(Parameters)
:int n: 界说了一个整数类型的参数 n,用于接收传入的石头数量。
取模运算符(Modulo Operator)
:%: 用于盘算一个数除以另一个数的余数。
逻辑非运算符(Logical NOT Operator)
:!: 用于反转布尔表达式的结果。
条件表达式(Conditional Expression)
:n % 4 != 0: 这是一个条件表达式,用于判定 n 是否不是4的倍数。
返回语句(Return Statement)
:return n % 4 != 0;: 返回条件表达式的结果,即如果 n 不是4的倍数,则返回 true,否则返回 false。
整数除法(Integer Division)
:n % 4: 这里使用了整数除法的余数操作,判定 n 除以4的余数是否为0。
以上就是办理这个题目的详细步骤,希望能够为各位提供开导和帮助。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4