当前位置: 首页 > news >正文

判断回文数的两种高效方法(附Python实现)

    在算法面试中,"判断回文数"是经典题目,常要求不转字符串实现。本文将详解两种解决方案:数学反转法(空间O(1))和字符串转换法(极简实现)

目录

问题定义

方法一:数学反转法(空间O(1))

关键步骤解析:

复杂度分析:

方法二:字符串转换法(极简实现)

两种方法对比

使用建议

问题定义

回文数指正序和倒序读相同的整数,例如:

  • 121 → 是回文数

  • 123 → 非回文数

  • -121 → 非回文数(负数均非回文)

  • 10 → 非回文数(末尾0导致反转后不等)

方法一:数学反转法(空间O(1))

核心思想:反转数字的一半,与剩余部分比较

def isPalindrome(x: int) -> bool:# 负数和末尾为0的非零数直接排除if x < 0 or (x % 10 == 0 and x != 0):return Falsereverted = 0# 反转直到后半部分≥前半部分while x > reverted:reverted = reverted * 10 + x % 10  # 取末位加入反转数x //= 10  # 移除已处理末位# 分奇偶情况判断return x == reverted or x == reverted // 10

关键步骤解析

  1. 边界处理

    • 负数直接排除(x < 0

    • 末位为0的非零数排除(如10→反转后为01→实际值1≠10)

  2. 反转循环

    • 每次取x末位:x % 10

    • 更新反转数:reverted = reverted*10 + x%10

    • 移除x末位:x //= 10

  3. 结果判断

    • 偶数位:x == reverted(如1221→12==12)

    • 奇数位:x == reverted//10(如12321→12==123//10)

复杂度分析

  • 时间复杂度:O(log n)(循环次数为位数一半)

  • 空间复杂度:O(1)(仅用常数空间)

方法二:字符串转换法(极简实现)

核心思想:利用字符串反转特性直接比较

def isPalindrome_str(x: int) -> bool:if x < 0:return Falses = str(x)return s == s[::-1]  # 字符串与反转比较

关键步骤解析

  1. 边界处理:排除所有负数

  2. 类型转换str(x)将数字转为字符串

  3. 反转比较s[::-1]生成反转字符串,与原串比较

复杂度分析

  • ⏰ 时间复杂度:O(n)(字符串反转操作)

  • 💾 空间复杂度:O(n)(存储字符串)

两种方法对比

特性数学反转法字符串转换法
核心操作数学运算(%, //)字符串切片
空间复杂度O(1)O(n)
可读性中等(需处理奇偶)极佳(一目了然)
适用场景内存敏感环境快速实现/可读优先

使用建议

  1. 面试场景

    • 优先询问是否允许转字符串

    • 若要求空间O(1),使用数学反转法

    • 若无限制,字符串法更稳妥

  2. 实际工程

    • 推荐字符串法:代码简洁不易出错

    • 性能敏感场景用数学法(如处理超大整数)

面试点睛:当被要求"不转字符串"时,数学法需注意两个关键边界:①负数 ②末位0的非零数。掌握这两点即可完美解题!

http://www.dtcms.com/a/335853.html

相关文章:

  • Webflux核心概念、适用场景分析【AI Chat类项目选型优势】
  • 数据链路层(2)
  • MySQL的事务基础概念:
  • 显式编程(Explicit Programming)
  • 深入解析函数指针及其数组、typedef关键字应用技巧
  • Go面试题及详细答案120题(21-40)
  • Pycharm Debug详解
  • C++ vector的使用
  • 自动驾驶中的传感器技术34——Lidar(9)
  • 前端项目练习-王者荣耀竞赛可视化大屏 -Vue纯前端静态页面项目
  • Springboot项目3种视图(JSP、Thymeleaf、Freemarker)演示
  • 图解直接插入排序C语言实现
  • 3.逻辑回归:从分类到正则化
  • pyecharts可视化图表组合组件_Grid:打造专业数据仪表盘
  • 矿物分类案列 (一)六种方法对数据的填充
  • C#WPF实战出真汁13--【营业查询】
  • 《设计模式》工厂方法模式
  • 数据结构与算法之 leetcode 98. 验证二叉搜索树 (前序,中序,后序遍历)
  • 影刀 RAP 迁移华为云备忘录数据到得到笔记
  • GitHub Copilot:AI编程助手的架构演进与真实世界影响
  • mac电脑开发嵌入式基于Clion(stm32CubeMX)
  • 深入了解linux系统—— 线程控制
  • IDE/去读懂STM32CubeMX 时钟配置图(有源/无源晶振、旁路/晶振模式、倍频/分频)
  • 三、k8s 1.29 之 安装2
  • 重温k8s基础概念知识系列三(工作负载)
  • 什么是GD库?PHP中7大类64个GD库函数用法详解
  • Kafka 面试题及详细答案100道(23-35)-- 核心机制2
  • 基础IO_系统文件IO | 重定向【Linux】
  • 《程序员修炼之道》第三四章读书笔记
  • 《算法导论》第 27 章 - 多线程算法