剑指offer-python刷题-扑克牌顺子
发布日期:2021-07-28 12:03:14 浏览次数:3 分类:技术文章

本文共 1602 字,大约阅读时间需要 5 分钟。

题目:现在有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]


方法一:

首先对数据进行排序,统计出数据中0的个数,然后判断后续相邻数字之差大于1的部分是否超过数字0的个数。

# -*- coding:utf-8 -*-class Solution:    def IsContinuous(self, numbers):        # write code here        numbers.sort()        num_0 = 0                for i in range(len(numbers)-1):            if numbers[i] == 0:                num_0 += 1                continue            if numbers[i+1] - numbers[i] != 0:                #比较相邻数字之差大于1的部分与数字0的个数之间的关系                num_0 -= numbers[i+1] - numbers[i]-1                if num_0 < 0:                    return False            else:                return False        return True

方法2:

由于限定数据都是又五个数组成的,理论上只要数字部分的最大值与最小值之差小于等于4,就可以说明该数据是顺子,但是要注意几种特殊情况的处理以及处理顺序。

# -*- coding:utf-8 -*-class Solution:    def IsContinuous(self, numbers):        # write code here        numbers.sort()        num_0 = 0        number_not_0 = []        for i in range(len(numbers)-1):            if numbers[i] == 0:                num_0 += 1                continue            number_not_0 = numbers[i:]            break        #数据中有4个数字0时肯定是顺子        if num_0 == 4:            return True        #数据中非0部分如果存在重复数字则一定不是顺子        if len(number_not_0) != len(set(number_not_0)):            return False        #在满足上一个条件后,数据中非0部分的最大值与最小值之差比4小,一定是顺子        if max(number_not_0) - min(number_not_0) <= 4:            return True        #其他情况都不是顺子        return False

 

转载地址:https://blog.csdn.net/sinat_42437278/article/details/117734212 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:剑指offer-python刷题-从尾到头打印链表
下一篇:剑指offer-python刷题-平衡二叉树

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月24日 00时10分11秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

史上最简单的spring-boot集成websocket的实现方式 2019-04-27
带你玩转属于自己的spring-boot-starter系列(一) 2019-04-27
带你玩转属于自己自己的spring-boot-starter系列(二) 2019-04-27
带你玩转属于自己的spring-boot-starter系列(三) 2019-04-27
基于SnowFlake算法如何让分库分表中不同的ID落在同一个库的算法的实现 2019-04-27
基于springboot的ShardingSphere5.X的分库分表的解决方案之分库解决方案(二) 2019-04-27
基于springboot的ShardingSphere5.X的分库分表的解决方案之分表解决方案(一) 2019-04-27
基于springboot的ShardingSphere5.X的分库分表的解决方案之关联查询解决方案(三) 2019-04-27
基于springboot的ShardingSphere5.X的分库分表的解决方案之基于seata的分布式事务的解决方案(十五) 2019-04-27
Linux文件管理参考 2019-04-27
FTP文件管理项目(本地云)项目日报(一) 2019-04-27
FTP文件管理项目(本地云)项目日报(二) 2019-04-27
FTP文件管理项目(本地云)项目日报(三) 2019-04-27
FTP文件管理项目(本地云)项目日报(四) 2019-04-27
【C++】勉强能看的线程池详解 2019-04-27
FTP文件管理项目(本地云)项目日报(五) 2019-04-27
FTP文件管理项目(本地云)项目日报(关于不定长包的测试) 2019-04-27
FTP文件管理项目(本地云)项目日报(六) 2019-04-27
FTP文件管理项目(本地云)项目日报(七) 2019-04-27
FTP文件管理项目(本地云)项目日报(八) 2019-04-27