第一反应可能是用 list收集到所有数据后,sort,看能不能成顺子,但是实现起来太麻烦

其实仔细思考一下,不难发现规律

根据题意,此 55 张牌是顺子的 充分条件 如下:
    除大小王外,所有牌 无重复 ;
    设此 55 张牌中最大的牌为 max ,最小的牌为 min (大小王除外),则需满足
                                                                       max - min < 5
算法:
1、遍历五张牌,遇到大小王(即 0 )直接跳过。
2、判别重复: 建立一个stack来验证是否有重复 ;
3、获取最大 / 最小的牌: 借助辅助变量 max_value min_value ,遍历统计即可。


# -*- coding:utf-8 -*-
class Solution:
    def IsContinuous(self, numbers):
        # write code here
        max_value = -float("inf")
        min_value = float("inf")
        stack = []
        for i in numbers:
            if i == 0: continue # 跳过大小王
            max_value = max(max_value, i) # 最大牌
            min_value = min(min_value, i) # 最小牌
            if i not in stack: # 添加牌至 stack
                stack.append(i)
            else:
                return False # 若有重复,提前返回 false
        return max_value - min_value < 5 # 最大牌 - 最小牌 < 5 则可构成顺子