LeetCode【0009】回文数

本文目录

  • 1 中文题目
  • 2 求解思路
    • 2.1 基础解法:数字反转法
    • 2.2 优化解法: 双指针数学法
    • 2.3 最优解法:取一半数字法
  • 3 题目总结

1 中文题目

给你一个整数 x ,如果 x 是一个回文整数,返回 True ;否则,返回 False
说明:

  • 回文数:是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是
  • 不能将整数转换成字符串,再去比较

示例 1:

输入:x = 121
输出:True 

示例 2:

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

示例 3:

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

提示:

  • − 2 31 ≤ x ≤ 2 31 − 1 -2^{31} \leq x \leq2^{31} - 1 231x2311

2 求解思路

2.1 基础解法:数字反转法

思路
将整个数字反转后与原数字比较,如果相等则为回文数。需要注意负数不可能是回文数,并且要处理反转时可能的整数溢出问题。

Python代码

class Solution:def isPalindrome(self, x: int) -> bool:"""判断一个整数是否是回文数参数:x: 输入的整数返回:布尔值,表示是否是回文数"""# 处理负数和以0结尾的非0数# 负数不可能是回文数# 除0以外,以0结尾的数不可能是回文数if x < 0 or (x != 0 and x % 10 == 0):return False# 处理0-9的个位数if x < 10:return True# 反转整个数字original = xreversed_num = 0# 逐位反转数字while x > 0:# 获取最后一位数字digit = x % 10# 处理溢出情况# Python不需要处理溢出,但如果在其他语言中需要处理if reversed_num > 214748364:  # 2^31-1 = 2147483647return False# 构建反转后的数字reversed_num = reversed_num * 10 + digit# 去掉原数字的最后一位x //= 10# 比较原数字和反转后的数字是否相等return original == reversed_num

时空复杂度分析

  • 时间复杂度分析 O(log n)
    • 需要遍历数字的每一位
    • n的位数大约是log10(n)
  • 空间复杂度分析 O(1)
    • 只使用了几个变量
    • 不需要额外的数据结构

2.2 优化解法: 双指针数学法

思路
通过数学运算获取数字的最高位和最低位(不转换为字符串),从两端向中间比较。使用除法获取最高位,取模获取最低位,每次比较后通过数学运算去除首尾数字,继续比较剩余部分,直到处理完所有位数。

python代码

class Solution:# 直接使用除法和取模def isPalindrome(self, x: int) -> bool:"""使用除法和取模的方式实现双指针比较"""# 处理负数和以0结尾的非0数if x < 0 or (x != 0 and x % 10 == 0):return False# 计算除数(用于获取最高位)div = 1while x // div >= 10:div *= 10# 从两端向中间比较while x > 0:# 获取最高位和最低位left = x // divright = x % 10# 比较最高位和最低位if left != right:return False# 去掉最高位和最低位x = (x % div) // 10# 除数要减少两位div //= 100return True

时空复杂度分析

  • 时间复杂度分析 O ( l o g n ) O(log n) O(logn)
    • 计算位数需要 O ( l o g n ) O(log n) O(logn)
    • 比较过程需要 O ( l o g n ) O(log n) O(logn)
  • 空间复杂度分析 O ( 1 ) O(1) O(1)
    • 只使用了固定数量的变量
    • 不需要额外的数据结构

2.3 最优解法:取一半数字法

思路
将数字后半部分反转,只需要一个简单的判断条件就能同时处理奇数位和偶数位的情况。当原数等于反转数 或 原数等于反转数去掉最后一位时,就是回文数。

算法步骤举例:

  • 对于偶数位数字1221:
x=1221, reversed_num=0
x=122, reversed_num=1
x=12, reversed_num=12
12 == 12 为true
  • 对于奇数位数字12321:
x=12321, reversed_num=0
x=1232, reversed_num=1
x=123, reversed_num=12
x=12, reversed_num=123
12 == 123//10 为true

python代码

class Solution:def isPalindrome(self, x: int) -> bool:"""取一半数字法的简洁实现参数:x: 输入的整数返回:布尔值,表示是否是回文数"""# 处理特殊情况:负数和以0结尾的非0数if x < 0 or (x != 0 and x % 10 == 0):return False# reversed_num存储反转后的后半部分数字reversed_num = 0# 当原始数字大于反转数字时继续处理# 这确保我们只处理后半部分数字while x > reversed_num:# 取出x的最后一位,加入到反转数字中reversed_num = reversed_num * 10 + x % 10# 去掉x的最后一位x //= 10# 统一处理奇数位和偶数位的情况:# 偶数位:x == reversed_num (例如:1221)# 奇数位:x == reversed_num//10 (例如:12321)return x == reversed_num or x == reversed_num // 10

时空复杂度分析

  • 时间复杂度:O(log n)
    • 只处理数字的一半位数
    • 每次操作是常数时间
  • 空间复杂度:O(1)

3 题目总结

题目难度:简单
应用算法:双指针、数学计算

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

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

相关文章

硬件基础17 半导体存储器——随机存取存储器RAM

目录 一、异步SRAM 二、同步SRAM 三、DRAM 四、字长位数扩展 五、字数的扩展 RAM是另一大类存储器&#xff0c;它与ROM的最大区别就是数据易失性&#xff0c;一旦失去电源供电&#xff0c;所存储的数据立即丢失。最大优点是可以随时快速地从其中任一指定地址读出&#xff…

安装VMware Tools选项显示灰色以及连接不上服务器,下载出错的正确解决办法

1.显示灰色解决办法&#xff1a; 解决办法&#xff1a; 关闭虚拟机 选择“虚拟机设置”&#xff0c;分别添加一个“软盘”和一个“CD/DVD”&#xff0c;并将所有软盘和CD/DVD&#xff08;包括自带的&#xff09;“连接”选项全部更改为“使用物理驱动器” 2.关闭虚拟机重启即…

git中使用tag(标签)的方法及重要性

在Git中打标签&#xff08;tag&#xff09;通常用于标记发布版本或其他重要提交。 Git中打标签的步骤&#xff1a; 列出当前所有的标签 git tag创建一个指向特定提交的标签 git tag <tagname> <commit-hash>创建一个带注释的标签&#xff0c;通常用于发布版本 git…

BMC运维管理:IPMI实现服务器远控制

IPMI实现服务器远控制 实操一、使用IPMI重置BMC用户密码实操二、使用IPMI配置BMC的静态IP实操三、IPMI实现BMC和主机控制操作实操四、ipmitool查看服务器基本信息实操五、ipmitool实现问题定位BMC(Baseboard Management Controller,基板管理控制器)是服务器硬件的一个独立管…

Android Profiler 内存分析

Android studio&#xff08;下面简称AS&#xff09;为App提供的性能分析工具&#xff0c;在AS3.0替换掉旧的分析工具&#xff0c;对于其使用方法&#xff0c;官方也有对应的介绍&#xff1a;Android Profiler 对于使用方法&#xff0c;我只用到比较简单的功能&#xff0c;高级的…

vue3 基于element-plus进行的一个可拖动改变导航与内容区域大小的简单方法

1、先上个截图&#xff1a; 说明&#xff1a;拖动上面的分隔栏就可以实现&#xff0c;改变左右区域的大小。 2、上面的例子来自官网的&#xff1a; Container 布局容器 | Element Plus 3、拖动的效果来自&#xff1a; https://juejin.cn/post/7029640316999172104#heading-1…

adminPage-vue3依赖DetailsModule版本说明:V1.2.1——1) - 新增span与labelSpan属性

文章目录 更新内容DetailsModuleAPI汇总属性自定义对象config.list(array<object> 类型) 使用span属性&#xff08;24栅格系统&#xff09; 更新内容 新增span与labelSpan属性&#xff0c;当使用span属性时将不适用默认的布局&#xff0c;如果24栅格系统进行重新布局 D…

系统聚类的分类数确定——聚合系数法

breast_cancer数据集分析——乳腺癌诊断 #读取乳腺癌数据 import pandas as pd import numpy as np from sklearn.datasets import load_breast_cancer data load_breast_cancer() X data.data y data.target.. _breast_cancer_dataset:Breast cancer wisconsin (diagnosti…

Android 实现柱形图

在 Android 中实现柱状图&#xff0c;可以使用流行的图表库 MPAndroidChart&#xff0c;它支持多种类型的图表&#xff0c;包括柱状图、折线图、饼图等。下面是一个基本的柱状图实现步骤&#xff0c;具体分为以下几个部分&#xff1a; 1. 添加依赖 首先&#xff0c;你需要在 …

dolphin 配置data 从文件导入hive 实践(一)

datax 支持多种数据源的相互读写&#xff0c;作为开源软件&#xff0c;提供了离线采集功能&#xff0c;方便系统开发&#xff0c;过程中遇到诸多配置&#xff0c;需要开发者自己探索&#xff0c;免费同样有成本 配置模板 {"setting": {},"job": {"s…

AUTOSAR CP Ethernet State Manager(EthSM)规范的主要功能以及工作原理导读

AUTOSAR Ethernet State Manager&#xff08;以下简称EthSM&#xff09;规范的主要功能 AUTOSAR Ethernet State Manager&#xff08;以下简称EthSM&#xff09;规范的主要功能包括&#xff1a; 通信控制 网络模式管理&#xff1a;为通信管理器&#xff08;ComM&#xff09;提…

深度学习中的感受野:从基础概念到多层次特征提取

在深度学习&#xff0c;特别是计算机视觉任务中&#xff0c;感受野&#xff08;Receptive Field&#xff09;是一个至关重要的概念。它指的是在神经网络中某一层的神经元在输入图像上“看到”的区域大小。感受野的大小影响了网络能捕捉的特征层级&#xff0c;从而决定了它的特征…

VirtIO实现原理(1)

本文内容参考: VirtIO实现原理——PCI基础_virtio-pci-CSDN博客 QEMU源码全解析 —— virtio(3)_qemu virtio block bus-CSDN博客 特此致谢! 序言 本系列文章是笔者在看了网名为“享乐主”的VirtIO系列文章后决心要写的。这位博主的“VirtIO专栏”中博文的内容从技术层…

2024年双11激光投影仪哪个品牌最好?当贝新品震撼视觉的秘密武器

激光投影仪逐渐占据家庭娱乐生活的中心位置&#xff0c;以其超大屏优势与卓越的性能获得了众多消费者的青睐。双11购物狂欢节期间&#xff0c;正是入手一台高品质激光投影仪的好时机&#xff0c;各大厂商也纷纷推出了品牌新品&#xff0c;2024年双11激光投影仪怎么选&#xff1…

React的概念以及发展前景如何?

React是一个由Facebook开发的用于构建用户界面的的开源JavaScript库&#xff0c;它主要用于构建大型、动态的Web应用程序。React的主要特点是使用VirtualDOM&#xff08;虚拟DOM&#xff09;来优化性能&#xff0c;并使用声明式的编程方式来编写UI。 React的主要概念包括&#…

定位,堆叠,CSS精灵,过渡,光标(前端)

一.定位 1.作用 灵活改变盒子在网页中的位置 2.标签 position 3.属性值 &#xff08;1&#xff09;相对定位relative relative&#xff08;相对定位&#xff09;-----改变位置的参照物是原来的位置&#xff0c;挪动后原来的位置不托标&#xff0c;不被占用。 要配合top…

2024-11-01 - 统一身份认证 - OpenLdap - 中间件 - 流雨声

摘要 2024-11-01 周五 杭州 暴雨 调查问卷: https://www.wjx.cn/vm/exIBFDM.aspx# 2024年转瞬即逝&#xff0c;可是生活还在继续&#xff0c;这里有一项关于人工智能和项目管理对于效能关系的调研问卷&#xff0c;AI 对工作的作用和影响。问卷不采集个人信息&#xff0c;在此…

【363】基于springboot的高校竞赛管理系统

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统高校竞赛管理系统信息管理难度大&#xff0c;容错率低&am…

qt QTextFrame详解

1. 概述 QTextFrame是Qt框架中用于表示文本框架的类。它允许在QTextDocument中创建和管理具有特定边界和格式的文本区域。QTextFrame可以包含文本、图像、表格或其他QTextFrame&#xff0c;从而提供丰富的文本布局和排版功能。QTextFrame通常与QTextCursor结合使用&#xff0c…

【JWT】Asp.Net Core中JWT刷新Token解决方案

Asp.Net Core中JWT刷新Token解决方案 前言方案一:当我们操作某个需要token作为请求头的接口时,返回的数据错误error.response.status === 401,说明我们的token已经过期了。方案二:实现用户无感知的刷新token值,我们希望当响应返回的数据是401身份过期时,响应阻拦器自动帮我…