面試題之硬幣排成線java極簡解法

2021-07-10 06:21:58 字數 819 閱讀 8383

問題描述:有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...