力扣(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 空间效率(反转)。

相关推荐
WJX_KOI7 小时前
Open Notebook 一个开源的结合AI的记笔记软件
python
0思必得08 小时前
[Web自动化] 反爬虫
前端·爬虫·python·selenium·自动化
嘴贱欠吻!8 小时前
Flutter鸿蒙开发指南(七):轮播图搜索框和导航栏
算法·flutter·图搜索算法
2301_822382768 小时前
Python上下文管理器(with语句)的原理与实践
jvm·数据库·python
张祥6422889048 小时前
误差理论与测量平差基础笔记十
笔记·算法·机器学习
踩坑记录8 小时前
leetcode hot100 2.两数相加 链表 medium
leetcode·链表
喵手8 小时前
Python爬虫实战:从零搭建字体库爬虫 - requests+lxml 实战采集字体网字体信息数据(附 CSV 导出)!
爬虫·python·爬虫实战·零基础python爬虫教学·csv导出·采集字体库数据·字体库字体信息采集
qq_192779879 小时前
C++模块化编程指南
开发语言·c++·算法
2301_790300969 小时前
Python深度学习入门:TensorFlow 2.0/Keras实战
jvm·数据库·python