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

相关推荐
uzong3 小时前
一个好的面试官,应该让候选人感到被尊重
面试
To_OC3 小时前
LC 131 分割回文串:刚学回溯时,我连怎么切字符串都想不明白
javascript·算法·leetcode
旖-旎4 小时前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
To_OC5 小时前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
delishcomcn6 小时前
AI视觉识别+分切算法:电化铝缺陷检测与裁切一体化解锁
人工智能·算法
触底反弹6 小时前
深入理解大模型采样:Temperature、Top-K、Top-P 的原理与实战
人工智能·算法·面试
大模型码小白6 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
雪碧聊技术6 小时前
力扣 LCR 091. 粉刷房子 —— 动态规划入门详解
算法·动态规划
麻雀飞吧7 小时前
最新量化学习路径,交易认知和技术实现要并行
人工智能·python