题解 | #扑克牌顺子#

扑克牌顺子

http://www.nowcoder.com/practice/762836f4d43d43ca9deb273b3de8e1f4

# -*- coding:utf-8 -*-
class Solution:
    def IsContinuous(self, numbers):
        # write code here
        numbers.sort()
        for i in range(len(numbers)):
            if numbers[i] in numbers[:i]+numbers[i+1:] and numbers[i]!=0:
                return False
            elif numbers.count(0)<=4:#仅0会重复
                count=numbers.count(0)
                chazhi=numbers[4-i]-numbers[0]
                if count==0 and numbers[4]-numbers[0]==4:
                    return True
                if count==1 and numbers[4]-numbers[1] in [3,4]:
                    return True
                if count==2 and numbers[4]-numbers[2] in [2,3,4]:
                    return True
                if count==3 and numbers[4]-numbers[3] in [1,2,3,4]:
                    return True
                if count==4:
                    return True
在做之前,对列表进行排序,默认小到大。
首先,如果存在非鬼牌的重复牌,那么是肯定凑不成顺子,先排除。
排除之后只需要考虑只有鬼牌重复的情况,其他的都是单张。
当没有鬼牌,只能是最大最小之差为4,比如12345,才能顺子。
当1张鬼牌,在纸上列一下牌的情况,可以很快得知:只有最大牌和最小牌的差值为3or4才行。
顺推,2张鬼牌,2,3,4;3张鬼牌,1,2,3,4,;4张鬼牌肯定能顺子。
关键在于有例子给你推出来,如果在赛码我tm半天可能想不出来。还好这边有提示哪些案例通不过。



全部评论
惨我个**写完了发现大佬写的又简单又快
点赞 回复 分享
发布于 2021-09-15 12:22

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务