【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…

第九部分 图论

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

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

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

【滑动窗口】【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…

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…

如何配置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的核心特…

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

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

uniapp APP应用程序iOS没有上架到苹果应用商店如何整包更新?

随着移动互联网的快速发展&#xff0c;uni-app 作为一种跨平台开发框架&#xff0c;受到了广泛欢迎。然而&#xff0c;有时候开发者可能会遇到一个问题&#xff1a;如何为已经发布到苹果应用商店的 uni-app APP 进行整包更新&#xff1f;尤其是当应用还没有上架到苹果应用商店时…

nodejs进阶

文章目录 写在前面一、dependencies、devDependencies和peerDependencies区别&#xff1a;二、需要牢记的npm命令2.1 npm init2.2 npm config list2.3 npm配置镜像源 三、npm install 的原理四、package-lock.json的作用五、npm run 的原理六、npx6.1 npx是什么6.2 npx的优势6.…

深信服技术认证“SCSA-S”划重点:文件上传与解析漏洞

为帮助大家更加系统化地学习网络安全知识&#xff0c;以及更高效地通过深信服安全服务认证工程师考核&#xff0c;深信服特别推出“SCSA-S认证备考秘笈”共十期内容&#xff0c;“考试重点”内容框架&#xff0c;帮助大家快速get重点知识~ 划重点来啦 *点击图片放大展示 深信服…

从AMI镜像恢复AWS Amazon Linux 2实例碰到的VNC服务以及Chrome浏览器无法启动的问题

文章目录 小结问题及解决VNC服务无法启动Chrome浏览器无法启动 参考 小结 将Amazon Linux 2保存为AMI (Amazon Machine Images)后&#xff0c;恢复成EC2 Instance (实例)后&#xff0c;VNC服务以及Chrome浏览器无法启动&#xff0c;进行了解决。 问题及解决 如果要将一个EC2…

treeview数据的保存和读取(以表格方式保存)

一个简单的treeivew&#xff0c;以表格方式保存比较简单&#xff0c;遍历所有节点&#xff0c;记录parentNode、node、data即可 parentiddataid002xx2001005xx5000003xx3001006xx6002007xx7001000xx0001001xx1-1004xx4007 如何将表格转为tree数据&#xff0c;代码如下&#xf…

数据结构-十大排序算法

数据结构十大排序算法 十大排序算法分别是直接插入排序、折半插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序、外部排序。 其中插入排序包括直接插入排序、折半插入排序、希尔排序&#xff1b;交换排序包括冒泡排序、快速排序&#xff1…

LSTM中文新闻分类源码详解

LSTM中文新闻分类 一、导包二、读取数据三、数据预处理1.分词、去掉停用词和数字、字母转换成小写等2.新闻文本标签数值化 三、创建词汇表/词典1.data.Field()2.空格切分等3.构建词汇表/词典使用训练集构建单词表&#xff0c;vectorsNone:没有使用预训练好的词向量,而是使用的是…