|
50 | 50 | <li><code>1 <= n <= 2<sup>31</sup> - 1</code></li>
|
51 | 51 | </ul>
|
52 | 52 |
|
53 | | - |
54 | 53 | ## 解法
|
55 | 54 |
|
56 | 55 | <!-- 这里可写通用的实现逻辑 -->
|
57 | 56 |
|
| 57 | +第一个得到 4 的倍数(即 n % 4 == 0)的将会输掉比赛。 |
| 58 | + |
| 59 | +证明: |
| 60 | + |
| 61 | +1. 当 `n == 4`,无论第一个玩家选择 1/2/3 哪个数字,第二个玩家总能选择剩下的数字,**第一个玩家将会输掉比赛**。 |
| 62 | +1. 当 `4 < n < 8`,即 (n = 5,6,7),第一个玩家可以相应地将数字减少为 4,那么 4 这个死亡数字给到了第二个玩家,第二个玩家将会输掉比赛。 |
| 63 | +1. 当 `n == 8`,无论第一个玩家选择 1/2/3 哪个数字,都会把 `4 < n < 8` 的数字留给第二个,**第一个玩家将会输掉比赛**。 |
| 64 | +1. ... |
| 65 | +1. 依次类推,当玩家拿到 n 这个数字,且 n 能被 4 整除,即 `n % 4 == 0`,他将会输掉比赛,否则他将赢得比赛。 |
| 66 | + |
58 | 67 | <!-- tabs:start -->
|
59 | 68 |
|
60 | 69 | ### **Python3**
|
61 | 70 |
|
62 | 71 | <!-- 这里可写当前语言的特殊实现逻辑 -->
|
63 | 72 |
|
64 | 73 | ```python
|
65 | | - |
| 74 | +class Solution: |
| 75 | + def canWinNim(self, n: int) -> bool: |
| 76 | + return n % 4 != 0 |
66 | 77 | ```
|
67 | 78 |
|
68 | 79 | ### **Java**
|
69 | 80 |
|
70 | 81 | <!-- 这里可写当前语言的特殊实现逻辑 -->
|
71 | 82 |
|
72 | 83 | ```java
|
| 84 | +class Solution { |
| 85 | + public boolean canWinNim(int n) { |
| 86 | + return n % 4 != 0; |
| 87 | + } |
| 88 | +} |
| 89 | +``` |
| 90 | + |
| 91 | +### **C++** |
| 92 | + |
| 93 | +```cpp |
| 94 | +class Solution { |
| 95 | +public: |
| 96 | + bool canWinNim(int n) { |
| 97 | + return n % 4 != 0; |
| 98 | + } |
| 99 | +}; |
| 100 | +``` |
| 101 | + |
| 102 | +### **Go** |
73 | 103 |
|
| 104 | +```go |
| 105 | +func canWinNim(n int) bool { |
| 106 | + return n%4 != 0 |
| 107 | +} |
74 | 108 | ```
|
75 | 109 |
|
76 | 110 | ### **...**
|
|
0 commit comments