如何判断给定数字是否为回文数?求不使用Python内置函数的解法
不使用Python内置函数判断回文数的正统方案
判断回文数的正统方法是数学反转法,完全通过数值运算实现,无需转字符串,效率更高,也是算法场景中的常规解法。
核心思路
- 先排除特殊情况:
- 负数不可能是回文数(负号无法对称)
- 末尾为0且数字本身不是0的数也不是回文数(比如10、100,反转后前导0会被忽略,无法和原数相等)
- 只反转数字的后半部分,和前半部分对比:
- 循环提取原数的最后一位,逐步构建反转后的后半部分数字
- 当原数小于等于反转后的数字时,说明已经处理了一半位数
- 最后对比:偶数位时原数应等于反转后的数字;奇数位时原数应等于反转后数字去掉最后一位(中间的单个数字不影响对称)
无内置函数的代码实现
def is_palindrome(x): # 处理特殊情况 if x < 0 or (x % 10 == 0 and x != 0): return False reverse_num = 0 while x > reverse_num: # 提取x的最后一位,加到反转数中 reverse_num = reverse_num * 10 + x % 10 # 去掉x的最后一位 x = x // 10 # 偶数位:x == reverse_num;奇数位:x == reverse_num // 10(去掉中间的数字) return x == reverse_num or x == reverse_num // 10
代码说明
- 没有使用任何Python内置函数(如
str()、reversed()等),完全依赖算术运算 - 时间复杂度为O(log₁₀n),只需要处理数字的一半位数
- 空间复杂度为O(1),只用到了几个变量存储中间值
内容的提问来源于stack exchange,提问作者Malladi Sripriya
相关产品推荐
相关产品推荐

