【LeetCode刷题笔记(13-1)】【Python】【回文数】【反转整数】【简单】

文章目录

  • 引言
  • 回文数
    • 题目描述
    • 提示
  • 题意分析
  • 解决方案1:【反转字符串】
  • 解决方案2:【反转整数】
  • 题外话
  • 结束语

9. 回文数


引言

编写通过所有测试案例的代码并不简单,通常需要深思熟虑理性分析。虽然这些代码能够通过所有的测试案例,但如果不了解代码背后的思考过程,那么这些代码可能并不容易被理解和接受。我编写刷题笔记的初衷,是希望能够与读者们分享一个完整的代码是如何在逐步的理性思考下形成的。我非常欢迎读者的批评和指正,因为我知道我的观点可能并不完全正确,您的反馈将帮助我不断进步。如果我的笔记能给您带来哪怕是一点点的启示,我也会感到非常荣幸。同时,我也希望我的分享能够激发您的灵感和思考,让我们一起在编程的道路上不断前行~

回文数

题目描述

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false

  • 回文数:正序(从左向右)和倒序(从右向左)读都是一样的整数。

    • 例如,121 是回文,而 123 不是。

示例 1:

  • 输入: x = 121
  • 输出: true

示例 2:

  • 输入:x = -121
  • 输出: false
  • 解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

  • 输入: x = 10
  • 输出: false
  • 解释:从右向左读, 为 01 。因此它不是一个回文数。

提示

  • -231 <= x <= 231 - 1

题意分析

根据示例,我们可以总结出以下规律:

  1. 依据示例2,对于负整数,由于存在"-"号,不可能构成回文数;
  2. 依据示例3,对于末尾数字为0的整数(0除外),不可能构成回文数,因为0不可能出现在正整数开头

因此,对于符合规律1/2的输入,我们可以先通过if语句直接返回False

即:

class Solution:def isPalindrome(self, x: int) -> bool:if x < 0 or (x % 10 == 0 and x != 0):return False

解决方案1:【反转字符串】

图1 题目暗示

题意告诉我们,进阶做法是不能基于字符串解决【回文数】这个问题 ===> 基于字符串的做法应该比较简单且容易上手。

实际上,基于字符串的解法确实非常简单,

完整代码如下

class Solution:def isPalindrome(self, x: int) -> bool:x_str = str(x) # 将整数x转换为字符串x_strreturn x_str == x_str[::-1]

从代码中可以看出,我们只需要三步即可解决【回文数】问题:

  1. 利用str()将整数x强制类型转换为字符串x_str
  2. 利用[::-1]将字符串反转;
  3. 比较反转前和反转后的字符串是否一致,一致则是回文数,返回True,否则返回False

运行结果

图2 运行结果

解决方案2:【反转整数】

问题1:如果题目不提示【字符串】解法,一般我们会想到什么方法呢?

我们一般不会离开"整数"这个范畴去解决问题 ===> 正常步骤应该是:

  1. 将整数x进行反转,变成另一个整数x_reverse
  2. 比较反转前的x和反转后的x_reverse,判断这两个整数是否相等,相等则是回文数,返回True,否则返回False

完整代码如下:

class Solution:  """  判断一个整数是否是回文数。  Args:  x (int): 待判断的整数。  Returns:  bool: 如果x是回文数,则返回True;否则返回False。  """  def isPalindrome(self, x: int) -> bool:  # 边界条件if x < 0 or (x % 10 == 0 and x != 0):  return False  # 初始化反转后的数为0  x_reverse = 0  # 保存原始的x值,以便后面与反转后的数进行比较  x_tmp = x  # 当x_tmp大于等于1时执行循环,将x_tmp的个位数逐个取出并放到反转后的数中  while x_tmp >= 1:  # 当前取出的个位数为 x_tmp % 10 x_reverse = x_reverse * 10 + x_tmp % 10  # 当前反转数乘以10 + 当前取出的个位数# 将x_tmp除以10,去掉当前个位数  x_tmp = x_tmp // 10  return x_reverse == x

运行结果:

图3 运行结果

复杂度分析

  • 时间复杂度:O(logn),其中 n 为输入的整数。
  • 空间复杂度:O(1)
    • 只需要常数空间存放若干变量 ===> O(1)

细节1:尽管将整数完全反转可以通过所有测试用例,但如果题目不仅要求输入x满足 -231 <= x <= 231 - 1,而且要求反转后的x_reverse也满足 -231 <= x_reverse <= 231 - 1,那么将整数完全反转可能会导致x_reverse溢出。

由于231 - 1 = 2147483647,如果整数x=2147483647,那么x_reverse=7463847412 > 231 - 1 ⇒ x_reverse溢出。

图3 示例结果

问题2:为什么把x=2147483647作为测试用例时,将整数完全反转的算法仍然能通过呢?

在Python3中,整数类型只有int,没有限制大小!!! ⇒ 理论上,Python 3中的整数没有上限(只要不超出内存空间)⇒ 将整数完全反转的算法面对有溢出风险的输入仍能顺利运行。

题外话

实际上,方案2仍然有进一步优化的空间,因为我们一直没有使用回文数的一个重要性质:对称性 ⇒ 我们实际上只需要反转一半的数字,就可以判断输入x是否为回文了。

参考链接

结束语

  • 亲爱的读者,感谢您花时间阅读我们的博客。我们非常重视您的反馈和意见,因此在这里鼓励您对我们的博客进行评论。
  • 您的建议和看法对我们来说非常重要,这有助于我们更好地了解您的需求,并提供更高质量的内容和服务。
  • 无论您是喜欢我们的博客还是对其有任何疑问或建议,我们都非常期待您的留言。让我们一起互动,共同进步!谢谢您的支持和参与!
  • 我会坚持不懈地创作,并持续优化博文质量,为您提供更好的阅读体验。
  • 谢谢您的阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/579856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI】人工智能爆发推进器之卷积神经网络

目录 一、什么是卷积神经网络 1. 卷积层&#xff08;Convolutional Layer&#xff09; 2. 激活函数&#xff08;Activation Function&#xff09; 3. 池化层&#xff08;Pooling Layer&#xff09; 4. 全连接层&#xff08;Fully Connected Layer&#xff09; 5. 训练过程…

html table+css实现可编辑表格

要实现可编辑的 HTML 表格&#xff0c;你可以使用 JavaScript 和 HTML5 的 contenteditable 属性。 <!DOCTYPE html> <html> <head><style>table {border-collapse: collapse;width: 100%;}th, td {border: 1px solid black;padding: 8px;text-align:…

区块链白皮书:基础建设见成效,国产自主生态正发展壮大

“区块链是全球信任机器的重要组成部分”——比尔盖茨 随着科技的飞速发展&#xff0c;区块链技术已成为引领全球创新的重要力量。近日&#xff0c;中国信通院发布了《区块链白皮书&#xff08;2023年&#xff09;》&#xff0c;为我们揭示了这一领域的前沿动态和未来发展趋势…

JDK 14全景透视:每个Java开发者必知的新特性

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 JDK 14全景透视&#xff1a;每个Java开发者必知的新特性 前言&#xff1a;switch表达式标准化Switch表达式成为正式特性的意义&#xff1a;如何使用Switch表达式&#xff1a;注意事项&#xff1a; ins…

docker安装Nacos和Rabbitmq

一、安装Nacos 首先需要拉取对应的镜像文件&#xff1a;&#xff08;切换版本加上对应版本号即可&#xff0c;默认最新版&#xff09; docker pull nacos/nacos-server 接着挂载目录&#xff1a; mkdir -p /mydata/nacos/logs/ #新建logs目录 mkdir -p …

第九部分 图论

目录 例 相关概念 握手定理 例1 图的度数列 例 无向图的连通性 无向图的连通度 例2 例3 有向图D如图所示&#xff0c;求 A, A2, A3, A4&#xff0c;并回答诸问题&#xff1a; 中间有几章这里没有写&#xff0c;感兴趣可以自己去学&#xff0c;组合数学跟高中差不多&#xff0c…

ElasticSearch 常用运维命令收集

ElasticSearch 常用运维命令收集 1. 集群健康检查 快速查看 curl -XGET localhost:9200/_cat/health?v&pretty集群的健康状态status&#xff0c;还可以了解到集群当前有多少节点number_of_nodes&#xff0c;多少个数据节点number_of_data_nodes&#xff0c;有多少个主分片…

mp4视频转rosbag文件(图片压缩、画面旋转、时间戳调整)

目录 目的 环境 主要步骤 创建py文件 执行py文件 效果 程序解释 画面旋转 时间戳调整 目的 将相机录制的mp4格式文件&#xff0c;转为ROS系统能使用的bag格式文件。 如果相机的画面不是正视的&#xff0c;会影响后续使用&#xff0c;需要旋转调整。 环境 安装有ROS…

亚马逊云科技 re:Invent 大会 - ElastiCache Serverless 模式来袭

大会介绍 亚马逊云科技的 re:Invent 大会是一年一度的&#xff0c;面向全球技术开发者科技盛会。几乎每次都会发布云科技、云计算等相关领域的产品重磅更新&#xff0c;不但将时下主流热门的技术不断整合&#xff0c;也未将来的发展标明了方向。 亚马逊云科技开发者社区为开发…

处理go中clientv3连接etcd包异常

目录 1、创建任意项目 2、出现异常 3、处理异常 1、创建任意项目 go mod init go-test 项目代码内容: package main//go.etcd.io/etcd/clientv3重点处理这个包 import ("context""fmt""go.etcd.io/etcd/clientv3""log""ti…

【滑动窗口】【map】LeetCode:76最小覆盖子串

作者推荐 【二叉树】【单调双向队列】LeetCode239:滑动窗口最大值 本文涉及知识点 滑动窗口 题目 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 “” 。 注意&#xff1a; 对…

根据DCT特征训练CNN

记录一次改代码的挣扎经历&#xff1a; 看了几篇关于DCT频域的深度模型文献&#xff0c;尤其是21年FcaNet&#xff1a;基于DCT 的attention model&#xff0c;咱就是说想试试将我模型的输入改为分组的DCT系数&#xff0c;然后就开始下面的波折了。 第一次尝试&#xf…

深入解析 Flink CDC 增量快照读取机制

一、Flink-CDC 1.x 痛点 Flink CDC 1.x 使用 Debezium 引擎集成来实现数据采集&#xff0c;支持全量加增量模式&#xff0c;确保数据的一致性。然而&#xff0c;这种集成存在一些痛点需要注意&#xff1a; 一致性通过加锁保证&#xff1a;在保证数据一致性时&#xff0c;Debez…

运算符的结合性(形神兼备)

运算符的结合性&#xff08;形神兼备&#xff09; 在编译原理中&#xff0c;产生式就是权威。表达式如果以某产生式进行语法分析&#xff0c;那么就只能按照它的方式进行表达&#xff0c;且不能具有二义性。但是&#xff0c;在表达式中有时会涉及打括号的问题。很多时候&#…

20231226在Firefly的AIO-3399J开发板上在Android11下调通后摄像头ov13850

20231226在Firefly的AIO-3399J开发板上在Android11下调通后摄像头ov13850 2023/12/26 8:22 开发板&#xff1a;Firefly的AIO-3399J【RK3399】 SDK&#xff1a;rk3399-android-11-r20211216.tar.xz【Android11】 Android11.0.tar.bz2.aa【ToyBrick】 Android11.0.tar.bz2.ab And…

TypeScript:箭头函数

在TypeScript中&#xff0c;箭头函数是一种简洁的函数定义方式。以下是一些使用箭头函数的例子&#xff1a; 基本的箭头函数&#xff1a; const add (x: number, y: number) > {return x y; };单个参数的箭头函数可以省略括号&#xff1a; const square (x: number) >…

如何配置TLSv1.2版本的ssl

1、tomcat配置TLSv1.2版本的ssl 如下图所示&#xff0c;打开tomcat\conf\server.xml文件&#xff0c;进行如下配置&#xff1a; 注意&#xff1a;需要将申请的tomcat版本的ssl认证文件&#xff0c;如server.jks存放到tomcat\conf\ssl_file\目录下。 <Connector port"1…

Linux介绍、安装、常见命令

Linux介绍 Linux是一种开源的操作系统&#xff0c;其内核由林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在1991年开始开发。与其他常见的操作系统如Windows和Mac OS不同&#xff0c;Linux是一个开放、自由的系统&#xff0c;可以免费使用、修改和分发。 Linux的核心特…

如何区分ChatGPT 3.5与ChatGPT 4:洞悉智能对话的新时代

如何区分ChatGPT 3.5与ChatGPT 4&#xff1a;洞悉智能对话的新时代 随着人工智能技术的快速发展&#xff0c;OpenAI持续推出更加强大和精准的模型&#xff0c;以改善和扩展用户体验。在聊天机器人领域&#xff0c;特别是OpenAI的ChatGPT系列&#xff0c;每一次迭代都带来了显著…

企业级实战项目:基于 pycaret 自动化预测公司是否破产

本文系数据挖掘实战系列文章&#xff0c;我跟大家分享一个数据挖掘实战&#xff0c;与以往的数据实战不同的是&#xff0c;用自动机器学习方法完成模型构建与调优部分工作&#xff0c;深入理解由此带来的便利与效果。 1. Introduction 本文是一篇数据挖掘实战案例&#xff0c;…