题目地址:
https://www.lintcode.com/problem/coins-in-a-line/description
有 n n n个硬币排成一条线。两个参赛者轮流从右边依次拿走 1 1 1或 2 2 2个硬币,直到没有硬币为止。拿到最后一枚硬币的人获胜。问先手玩家是否有必胜策略。
如果 3 ∣ n 3|n 3∣n,则先手玩家拿 x x x个硬币,后手玩家只需要拿 3 − x 3-x 3−x个硬币就能必胜,此时返回false;否则,先手玩家可以先拿 n % 3 n\%3 n%3这么多个硬币,此时先手就必胜。代码如下:
public class Solution {
/**
* @param n: An integer
* @return: A boolean which equals to true if the first player will win
*/
public boolean firstWillWin(int n) {
// write your code here
return n % 3 != 0;
}
}
时空复杂度 O ( 1 ) O(1) O(1)。