剑指offer:Python 扑克牌顺子 Python实现扑克牌的顺子的多种方法

2024-02-06 08:18

本文主要是介绍剑指offer:Python 扑克牌顺子 Python实现扑克牌的顺子的多种方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

阅读目录

      • 题目描述
      • 思路及Python实现

题目描述

LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。 现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何, 如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0。

思路及Python实现

  • 根据题意,大小王总共四张,并且看成0,作为顺子除了0之外,不可以有重复的,而且其他的数字相互之间的差值要小于0的个数,最大数和最小数之间的差值要小于5(不包括0)
  • 如果没有0,牌的总共张数要等于5,如果有0,牌的张数不能大于9

法一:

class Solution:def IsContinuous(self, numbers):if len(numbers) < 5:return Falsenumbers.sort()zero_num = numbers.count(0)if zero_num > 4:return Falsenum = 0for i in range(zero_num, len(numbers) - 1):if numbers[i] == numbers[i + 1]:return Falsenum += (numbers[i + 1] - numbers[i] - 1) # 相差至多为1if num > zero_num:return Falseelse:return True

法二:不需要排序,也不需要统计0的数量;数组的最大值和最小值之差要小于5(不包括0),且除了0之外,没有重复数字。

# 牺牲空间换时间
class Solution:def IsContinuous(self, numbers):if len(numbers) < 5 or len(numbers) > 9:return Falsemax_num = -1min_num = 14count = dict() # 字典只是为了 在是对子还是乱序时也能保证是对的for i in range(len(numbers)):if numbers[i] == 0:continueif numbers[i] < min_num:min_num = numbers[i]if numbers[i] > max_num:max_num = numbers[i]if numbers[i] not in count and numbers[i] != 0:count[numbers[i]] = 0else:return Falsea = max_numb = min_numif max_num - min_num < 5:return Trueelse:return Falseobj = Solution()
print(obj.IsContinuous([0, 0, 0, 0, 1, 3, 2, 5, 4]))

不用字典,节省空间,但是要先排序

class Solution:def IsContinuous(self, numbers):if len(numbers) < 5 or len(numbers)>9:return Falsemax = -1min = 14numbers.sort() # 先排序for i in range(len(numbers)):if numbers[i] == 0:continueif numbers[i] < min:min = numbers[i]if numbers[i] > max:max = numbers[i]else:return Falseif max - min < 5:return Trueelse:return Falseobj = Solution()
print(obj.IsContinuous([1, 3, 2, 5, 4]))       

这篇关于剑指offer:Python 扑克牌顺子 Python实现扑克牌的顺子的多种方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/683682

相关文章

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买