题目
从扑克牌中随机抽5张牌,判断是不是一个顺子,即5张牌是不是连续的。
2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。
思路
- 只要判断5个数字是否连续。将数组排序后,除掉大小王,判断是否间隔为1,若不为1,是否有足够的大小王数量来填补。
- 时间复杂度:O(n)
- 空间复杂度:O(1)
代码
思路: 时间复杂度:O(n),空间复杂度:O(1)
def continuous_cards(cards):
"""
:param cards: list represents cards
:return: is continuous
"""
cards.sort()
joker = 0
for card in cards:
if card == 0:
joker += 1
else:
break
if joker > 2:
raise Exception('impossible combo')
for i in range(joker+1,5):
if cards[i] - cards[i - 1] != 1:
joker -= (cards[i] - cards[i - 1] - 1)
if joker < 0:
return False
return True