描述
有 n 个硬币排成一条线。两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止。拿到最后一枚硬币的人获胜。
请判定 第一个玩家 是输还是赢?
您在真实的面试中是否遇到过这个题? 是
样例
n = 1, 返回 true.
n = 2, 返回 true.
n = 3, 返回 false.
n = 4, 返回 true.
n = 5, 返回 true.
挑战
有 n 个硬币排成一条线。两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止。拿到最后一枚硬币的人获胜。
请判定 第一个玩家 是输还是赢?
您在真实的面试中是否遇到过这个题? 是
样例
n = 1, 返回 true.
n = 2, 返回 true.
n = 3, 返回 false.
n = 4, 返回 true.
n = 5, 返回 true.
挑战
O(1) 时间复杂度且O(1) 存储。
程序
class Solution {
public:
/**
* @param n: An integer
* @return: A boolean which equals to true if the first player will win
*/
bool firstWillWin(int n) {
// write your code here
if(n == 0)
return false;
if(n == 1)
return true;
if(n == 2)
return true;
if(n == 3)
return false;
if(n == 4)
return true;
if(n == 5)
return true;
firstWillWin(n - 3);
/*
if(n % 3 == 0)
return false;
else
return true;
*/
}
};