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
posted @ 2020-12-04 09:21  童年の波鞋  阅读(160)  评论(0编辑  收藏  举报