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

相关推荐
工业互联网专业8 小时前
基于Python的黑龙江旅游景点数据分析系统的实现_flask+spider
python·flask·vue·毕业设计·源码·课程设计·spider
旖-旎8 小时前
二分查找(山脉数组的峰顶索引)(5)
c++·算法·leetcode·二分查找·力扣·双指针
阿贵---8 小时前
单元测试在C++项目中的实践
开发语言·c++·算法
进击的小头8 小时前
第14篇:MPC控制案例——无人机高度控制
python·算法·无人机
2401_891482178 小时前
C++中的事件驱动编程
开发语言·c++·算法
吐个泡泡v8 小时前
Python 开发“设计模式”指南
python·设计模式
sw1213898 小时前
C++与Rust交互编程
开发语言·c++·算法
Huyuejia8 小时前
self-attention代码
算法
梦想的初衷~8 小时前
无人机多光谱-生态三维建模全流程实战——基于Python与AI辅助技术
人工智能·python·无人机·生态·遥感·多光谱
2401_857918298 小时前
模板编译期机器学习
开发语言·c++·算法