問題描述:有n
個硬幣排成一條線。兩個參賽者輪流從右邊依次拿走 1 或 2 個硬幣,直到沒有硬幣為止。拿到最後一枚硬幣的人獲勝。
請判定 第乙個玩家 是輸還是贏?
該題為一道典型的動態規劃題,但此處將描述一種遞迴的極簡的演算法。
題目中給出的測試用例如下:
n =1
, 返回true
.
n =2
, 返回true
.
n =3
, 返回false
.
n =4
, 返回true
.
n =5
, 返回true
.
當n = 6時,由於每個參賽者每次只能拿走1或2個硬幣。現在假設第乙個玩家拿走了乙個硬幣,則對於第二個玩家還剩五個硬幣,由於
n =5
, 返回true
,第二個玩家必贏;假設第乙個玩家拿走了兩個硬幣,則對於第二個玩家還剩四個硬幣,由於
n =4
, 返回true
,則第二個玩家必贏。因此
n =6
時 返回false
.依次類推,第乙個玩家的輸贏結果應該是週期為3的迴圈。所以**如下:
public class solution
else return true;
}}
該方法用數學的方式解決了動態規劃過程中面臨的繁瑣的問題。
九章演算法 位元組跳動面試題 硬幣排成線
有 n 個硬幣排成一條線。兩個參賽者輪流從右邊依次拿走 1 或 2 個硬幣,直到沒有硬幣為止。拿到最後一枚硬幣的人獲勝。請判定先手玩家必勝還是必敗?若必勝,返回 true,否則返回 false.樣例 1 輸入 1輸出 true 樣例2 輸入 4輸出 true 解釋 先手玩家第一輪拿走乙個硬幣 此時還...
面試題之Java 集合
方法 size 返回集合中的項數。isempty 判斷集合中是否為空 contains object 判斷集合中是否包含某項 clear add e 從集合中新增某項 remove object 從集合中刪除某項 iterator 遍歷集合 2.1.實現iterable介面的的類可以擁有增強for迴...
Java面試題之JVM相關(1)
女朋友給她男友打 接通的那一刻,手機裡竟然傳出一句 對不起,您所撥打的 正在通話中,請稍後再撥 女朋友一聽就知道是她男友的聲音,所以沒有結束通話問 不是還有一句英文嗎?對面支支吾吾 sorry,you the number 一道很坑的面試題,但是對理解jvm很有幫助?例一 package com.e...