從撲克牌中隨機抽5張牌,判斷是不是乙個順子,即這5張牌是不是連續的。2~10為數字本身,a為1,j為11,q為12,k為13,而大、小王為 0 ,可以看成任意數字。
組成順子有一些條件是必須要滿足的,
1.除了大小王之外, 其他牌不能重複
2.除了大小王之外, 最大值-最小值==4(沒有零), 最大值-最小值==3或4(有1個零), 最大值-最小值==2或3或4(有2個零) , 但是看到了別人的優化版, 這幾種情況可以統一為最大值-最小值<5即可, 不需要看0個數量
tip : 使用set可以方便的檢視陣列中是否有重複,
第乙個演算法是分開驗證2個條件, 更有助於理解 , 第二個演算法優化了判斷方法,效率更高
func isstraight(_ nums: [int]) -> bool
if num>maxvalue
if num= 5 肯定不可以, 比如34568
if maxvalue-minvalue >= nums.count
// 把陣列轉成set,利用set檢視是否有重複, 檢查除0以外有沒有重複
var result = set(nums)
result.remove(0)
// 小於說明非0數字 有重複
if result.count < nums.count - numberofking
// 到這裡, 說明是無重複 && 最大值-最小值<=4, 剩餘的可以用0補齊
return true
}
目前來看最優解是下面這個, 同時把第一步和第二步判斷了, 只需要遍歷一次即可
// 優化版
func isstraight2(_ nums: [int]) -> bool
if num>maxvalue
if num= nums.count
// 到這裡, 說明是無重複, 最大值-最小值<=4
return true
}
撲克牌順子
ll今天心情特別好,因為他去買了一副撲克牌,發現裡面居然有2個大王,2個小王 一副牌原本是54張 他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!紅心a,黑桃3,小王,大王,方片5 oh my god 不是順子.ll不高興了,他想了想,決定大 小...
撲克牌順子
題目描述 ll今天心情特別好,因為他去買了一副撲克牌,發現裡面居然有2個大王,2個小王 一副牌原本是54張 他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!紅心a,黑桃3,小王,大王,方片5 oh my god 不是順子 ll不高興了,他想了想,...
撲克牌順子
ll今天心情特別好,因為他去買了一副撲克牌,發現裡面居然有2個大王,2個小王 一副牌原本是54張 他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!紅心a,黑桃3,小王,大王,方片5 oh my god 不是順子 ll不高興了,他想了想,決定大 小...