题目描述
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。
2~10为数字本身,A为1,J为11,Q为12,K为13,大小王可以看做任意数字。
为了方便,大小王均以0来表示,并且假设这副牌中大小王均有两张。
样例
样例1
输入:[8,9,10,11,12]
输出:true
样例2
输入:[0,8,9,11,12]
输出:true
python语言题解(第一次写题解,有不对的地方请指正~~)
时间复杂度分析:O(n)
考虑key:
首先进行排序操作
- 不能出现对牌情况,即连续俩个数不能相同
- 排序后两个相邻数字的差值减去1不能大于其中0的个数
备注:0可以替代任意的数字
class Solution(object):
def isContinuous(self, numbers):
if not numbers:
return False
numbers.sort()
num_0=0
for i in range(len(numbers)-1):
if numbers[i]==0:
num_0+=1
else:
##是否出现连续两数相等
if numbers[i]==numbers[i+1]:
return False
##正常情况
if numbers[i+1]-numbers[i]==1:
continue
##连续两数差值大于0的个数+1
if numbers[i+1]-numbers[i]-1>num_0:
return False
##维护0的个数,用掉一个0充当其他的数之后就减去用掉的个数
num_0-=numbers[i+1]-numbers[i]-1
return True
排序,去重,求空格,计算