力扣(LeetCode) 9: 回文数 - 解法思路

问题概述

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

回文数是指正读和反读都相同的整数。

解法 1:字符串转换(最简单)

工作原理

将整数转换为字符串,检查是否等于其反转:

python 复制代码
class Solution:
    def isPalindrome(self, x):
        if x < 0:
            return False
        s = str(x)
        return s == s[::-1]

为什么 x < 0 返回 False?

  • 负数不能是回文数,因为它们在开头有一个负号(-)
  • 当反转时,像 -121 这样的负数会变成 121-,这不是有效的整数表示
  • 因此,所有负数都会被立即拒绝

复杂度分析

  • 时间复杂度: O(n) - 其中 n 是数字的位数
  • 空间复杂度: O(n) - 用于字符串转换

何时使用

  • 最简单易懂,易于实现
  • 在实际情况下最快
  • 易于阅读和维护

解法 2:反转数字(数学方法)

工作原理

数学方法反转数字并与原数字比较:

python 复制代码
class Solution:
    def isPalindrome(self, x):
        if x < 0:
            return False
        
        original = x
        reversed_num = 0
        
        while x > 0:
            reversed_num = reversed_num * 10 + x % 10
            x //= 10
        
        return original == reversed_num

复杂度分析

  • 时间复杂度: O(n) - 其中 n 是数字的位数
  • 空间复杂度: O(1) - 只使用常数额外空间

何时使用

  • 当你想避免字符串转换时
  • 需要常数空间
  • 实际情况下比字符串转换稍慢

对比

方法 时间 空间 最佳适用
字符串转换 O(n) O(n) 大多数情况,最简单代码
反转数字 O(n) O(1) 常数空间要求

总结

字符串转换方法是最简单的,在大多数情况下实际最快。反转数字方法使用常数空间但稍慢。根据你的优先级选择:简单性和速度(字符串)vs 空间效率(反转)。

相关推荐
SelectDB7 分钟前
云数仓月度账单总是超预算:Apache Doris 与 Snowflake 五类成本项拆解与对账脚本
python
迪菲赫尔曼13 分钟前
【基础篇 12】把环境与源码接起来:检查 GPU,再安装服务器上的项目
运维·服务器·开发语言·人工智能·python·yolo·目标检测
2601_9628857229 分钟前
2026 Python 股票数据接口选型指南(横评 + 决策树)
开发语言·python·区块链
j7~1 小时前
【穷举、深搜与回溯算法】一棵决策树讲透全排列与子集
数据结构·c++·算法·leetcode·回溯·递归
龙腾AI白云1 小时前
大模型检索增强生成(RAG)的技术原理与架构设计
数据库·python·机器学习·知识图谱
fanruitian1 小时前
python 可视化 panda seaborn matplotlib.pyplot
开发语言·python·matplotlib
梦想不只是梦与想1 小时前
Python 中的 json 模块
python·json·对象转字符串
星河耀银海1 小时前
Python文件操作:read、readline、readlines读取方式对比
python·文件操作·面向对象·基础函数·教程学习
傅科摆 _ py2 小时前
DP,贪心,堆和栈,二分力扣复习
开发语言·python·算法
Lichee202 小时前
招行Java 面试知识点梳理:Spring 事务、锁、线程池、集合
java·面试