美文网首页
394. 硬币排成线

394. 硬币排成线

作者: 薄荷糖的味道_fb40 | 来源:发表于2019-05-18 17:01 被阅读0次

描述

有 n 个硬币排成一条线。两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止。拿到最后一枚硬币的人获胜。

请判定 先手玩家 必胜还是必败?

若必胜, 返回 true, 否则返回 false.

样例

样例 1:

输入: 1
输出: true
样例 2:

输入: 4
输出: true
解释: 
先手玩家第一轮拿走一个硬币, 此时还剩三个.
这时无论后手玩家拿一个还是两个, 下一次先手玩家都可以把剩下的硬币拿完.

思路:

dp[n]为当前硬币数为n时先手胜或者败,如果dp[n]=true代表先手胜利,否则代表失败。先手胜利的条件是后手失败,那么根据题意,后手可以表示为dp[n-1]dp[n-2],因此dp[n]=true的条件为!dp[n-1]或者!dp[n-2]。具体实现如下。

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;
        }
        vector<bool> dp(n+1,false);
        dp[1]=true;
        dp[2]=true;
        for(int i=3;i<=n;i++)
        {
            if(!dp[i-1] || !dp[i-2])
            {
                dp[i]=true;
            }
            else
            {
                dp[i]=false;
            }
        }
        return dp[n];
    }
};

相关文章

  • 394. 硬币排成线

    描述 有 n 个硬币排成一条线。两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止。拿到最后一枚硬...

  • 394. 硬币排成线

    描述 有 n 个硬币排成一条线。两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止。拿到最后一枚硬...

  • LintCode 硬币排成线

    有 n 个硬币排成一条线。两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止。拿到最后一枚硬币的人...

  • LintCode394 硬币排成线

    问题: 有 n 个硬币排成一条线。两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止。拿到最后一枚...

  • 396. 硬币排成线 III

    描述 有 个硬币排成一条线, 第 枚硬币的价值为 .两个参赛者轮流从任意一边取一枚硬币, 直到没有硬币为止. ...

  • 拿硬币

    有 n 个硬币排成一条线。两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止。拿到最后一枚硬币的人...

  • Java 算法-硬币排成线II(动态规划)

      好久没有做面试题了,感觉自己的编程能力又变弱了。  今天在lintCode上做了一道题,关于动态规划,比较有意...

  • 394. Decode String [Medium] 栈

    394. Decode String

  • 打卡-字符串解码

    394. 字符串解码

  • 字符串解码

    Algorithm 394. Decode String[https://leetcode.com/problem...

网友评论

      本文标题:394. 硬币排成线

      本文链接:https://www.haomeiwen.com/subject/itbtzqtx.html