c_lc_扑克牌顺子(模拟 / 思维)
如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0(0可以变换为任何数字)。
思路:模拟
class Solution:
def IsContinuous(self, A):
if not A: return False
n,cnt,mp=len(A),[0],[False]*50
mi,mx=float('inf'),-float('inf')
for x in A:
if x==0:
cnt[x]+=1
else:
mp[x]=True
mi=min(mi,x)
mx=max(mx,x)
l=0
for i in range(mi,mx+1):
if mp[i]:
l+=1
else:
if cnt[0]>0:
cnt[0]-=1
l+=1
else:
return False
if l<n:
while cnt[0]>0:
l+=1
cnt[0]-=1
return l==n
别人的优秀思路:比较0的个数和连续的个数
class Solution:
def isStraight(self, A: List[int]) -> bool:
if not A: return False
A.sort()
n,c,d=len(A),0,0
for i in range(n-1):
if A[i]==0:
c+=1
else:
if A[i]==A[i+1]: return False
elif A[i+1]!=A[i]+1: d+=A[i+1]-A[i]-1
return c>=d