Leetcode Link: 剑指 Offer 61. 扑克牌中的顺子 - 力扣(LeetCode)

题目

解法一

思路: 本质: 0 的数量大于等于 差-1 的总和即可

譬如[0, 0, 2, 3, 6] 由于 0 可以当作任意牌,所以只要缺少的中间的牌数0 的数量即可,本题缺少 4,5 两张牌,正好两个 0,满足

如果两个牌不为零,但是相等,一定是 False

题解

class Solution:
    def isStraight(self, nums: List[int]) -> bool:
        nums.sort()
        n0 = 0  # 0的数量
        diff = 0  # 缺少的牌数
        for i in range(len(nums)-1):
            if nums[i] == 0: 
                n0 += 1
            else:
                if nums[i] == nums[i+1]: #特判,相等不为0,一定False
                    return False
                diff = nums[i+1] - nums[i] - 1 + diff
        # 处理最后一张
        if nums[-1] == 0: n0 += 1
 
        return n0 >= diff

启发和联系