題目:
有 n 個硬幣排成一條線。兩個參賽者輪流從右邊依次拿走 1 或 2 個硬幣,直到沒有硬幣為止。拿到最後一枚硬幣的人獲勝。
請判定 先手玩家 必勝還是必敗?
若必勝, 返回 true, 否則返回 false.
樣例樣例 1:
輸入: 1
輸出: true
樣例 2:
輸入: 4
輸出: true
解釋:先手玩家第一輪拿走乙個硬幣, 此時還剩三個.
這時無論後手玩家拿乙個還是兩個, 下一次先手玩家都可以把剩下的硬幣拿完.
解題思路:博弈型動態規劃,首先從只剩一枚硬幣開始思考,只有一枚硬幣時則必勝,同理只有兩枚硬幣時也是必勝,而只有三枚硬幣時則必敗,因為無論怎麼取都會剩下硬幣,而且剩下的數目下一輪就可以全拿完。當只有n枚硬幣時,如果只剩n - 1或者 n - 2的情況下有必勝(也就意味著對手必勝)那麼說明只剩n枚硬幣時必敗,只有當n - 1或者 n - 2的情況都是必敗則只剩n枚硬幣時必勝
public
class
solution
return dp[n];}
}
lintcode 硬幣排成線
有 n 個硬幣排成一條線。兩個參賽者輪流從右邊依次拿走 1 或 2 個硬幣,直到沒有硬幣為止。拿到最後一枚硬幣的人獲勝。請判定 先手玩家 必勝還是必敗?若必勝,返回 true,否則返回 false.輸入 4 輸出 true 解釋 先手玩家第一輪拿走乙個硬幣,此時還剩三個.這時無論後手玩家拿乙個還是兩...
lintcode 硬幣排成線2
有 n 個不同價值的硬幣排成一條線。兩個參賽者輪流從 左邊 依次拿走 1 或 2 個硬幣,直到沒有硬幣為止。計算兩個人分別拿到的硬幣總價值,價值高的人獲勝。請判定 先手玩家 必勝還是必敗?若必勝,返回 true,否則返回 false.樣例 1 輸入 1,2,2 輸出 true 解釋 先手玩家直接拿走...
395 硬幣排成線 II
中文english 有n個不同價值的硬幣排成一條線。兩個參賽者輪流從 左邊 依次拿走 1 或 2 個硬幣,直到沒有硬幣為止。計算兩個人分別拿到的硬幣總價值,價值高的人獲勝。請判定 先手玩家 必勝還是必敗?若必勝,返回true,否則返回false.樣例 1 輸入 1,2,2 輸出 true 解釋 先手...