判斷撲克牌能否組成順子

2021-10-08 04:11:12 字數 1024 閱讀 3991

從撲克牌中隨機抽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不高興了,他想了想,決定大 小...