[2021-09-15][简单][NC63]扑克牌顺子

题目来源牛客网

描述
现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。
有如下规则:

  1. A为1,J为11,Q为12,K为13,A不能视为14
  2. 大、小王为 0,0可以看作任意牌
  3. 如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false。
    例如:给出数据[6,0,2,0,4]
    中间的两个0一个看作3,一个看作5 。即:[6,3,2,5,4]
    这样这五张牌在[2,6]区间连续,输出true
    数据保证每组5个数字,每组最多含有4个零,数组的数取值为 [0, 13]
示例1
输入:[6,0,2,0,4]
返回值:true

示例2
输入:[0,3,2,6,4]
返回值:true

示例3
输入:[1,0,0,1,0]
返回值:false

示例4
输入:[13,12,11,0,1]
返回值:false

解题思路:
1、首先要搞清楚,连续5个数如果要组成顺子的必要条件是:
1)五个数不能是重复的数字(set函数去重,len函数求去重后列表长度)
2)最大值减去最小资必须等于4(sort函数对列表排序)
搞清楚这个规律是解题最关键的部分。
2、其次就是大小王的作用了,对解题产生了比较大的困扰。
两副牌最多有四个王。
先来分析下成为顺子的必须条件:
1)当有四个王的时候:不管剩余一张是什么,都一定能凑成顺子
2)当有三个王的时候:带着0只能有三个不重复值,且最大值减去除0外的最小值必须小于等于4
3)当有两个王的时候:带着0只能有四个不重复值,且最大值减去除0外的最小值必须小于等于4
4)当有一个王的时候:带0带着0只能有五个不重复值,且最大值减去除0外的最小值必须小于等于4
5)当没有王的时候:必须有五个不重复值,且最大值减去最小值必须等于4
除了上述这些成为顺子的条件,其他的都无法成为顺子

将思路转换为代码即可

class Solution:
    def IsContinuous(self, numbers):
        # write code here
        flag = numbers.count(0)
        numbers.sort()
        l = len(set(numbers))
        
        if flag == 0 and l == 5 and numbers[-1]-numbers[0] == 4:
            return True
        if flag == 1 and l == 5 and numbers[-1]-numbers[1]<=4:
            return True
        if flag == 4: 
            return True
        if l == 5-flag+1 and numbers[-1] - numbers[flag]<=4:
            return True
        return False
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容