码迷,mamicode.com
首页 > 其他好文 > 详细

lintcode 中等题:Coins in a Line 硬币排成线

时间:2015-11-12 17:50:14      阅读:422      评论:0      收藏:0      [点我收藏+]

标签:

题目

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

请判定 第一个玩家 是输还是赢?

样例

n = 1, 返回 true.

n = 2, 返回 true.

n = 3, 返回 false.

n = 4, 返回 true.

n = 5, 返回 true.

挑战

O(1) 时间复杂度且O(1) 存储。

解题

两个人在一次拿的时候,当第一个人拿的是1 时,第二个人拿的就是2;当第一个人拿的是2时,第二个人拿的就是1。这样一次拿取得值是3.这样就是一个以3为周期的序列,当只剩三个硬币的时候,不傻也知道怎么拿的。如下,直接对只有三枚硬币的情况考虑即可。

 

n = 1, 返回 true.

 

n = 2, 返回 true.

 

n = 3, 返回 false.

 

注意:

取硬币格式的序列可以是:(1,2),(1,2),(2,1),(1,2)而不是严格的按照(1,2)(1,2)的序列取硬币

解题

根据上面给的样例,很简单的写出下面程序了

 

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;
    }
}

 当然也可以递归的

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
        if(n==1||n==2)
            return true;
        if(n==0 ||n==3)
            return false;
        return firstWillWin(n-3);
    }
}

 

 

 

lintcode 中等题:Coins in a Line 硬币排成线

标签:

原文地址:http://www.cnblogs.com/theskulls/p/4959349.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!