You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python整数反转:现有两种实现是否为最优方案?

反转整数算法的最优性分析

你的双指针实现时间复杂度是O(n),这已经是时间复杂度层面的最优解了——毕竟要反转长度为n的序列,最少得遍历一半元素(O(n/2)等价于O(n)),不可能有比O(n)更低的时间复杂度,每个元素至少得被访问一次才能完成交换。

双指针代码的优化空间

你的双指针逻辑没问题,但可以简化冗余操作:

  • 不用手动循环把字符串拆成列表,直接用list(str(integer))就行,省掉append的循环。
  • 变量名可以更直观,比如用left和right代替index_one和index_final。

优化后的版本:

def int_reversed(integer):
    num_list = list(str(integer))
    left, right = 0, len(num_list) - 1
    while right > left:
        num_list[left], num_list[right] = num_list[right], num_list[left]
        left += 1
        right -= 1
    return int(''.join(num_list))

字符串切片实现的本质

你写的num[::-1]切片写法,底层是Python用C实现的高效反转逻辑,时间复杂度同样是O(n),而且实际运行速度比纯Python写的双指针更快——毕竟内置操作经过了高度优化。但从算法复杂度的角度,两者是等价的,都是O(n)时间、O(n)空间(因为都要把整数转成字符串/列表,占用额外空间)。

不同维度的最优解

如果只看算法复杂度理论,双指针实现已经是最优的。但从工程效率来说,字符串切片写法更简洁,运行也更快。另外,如果要追求空间最优,可以用数学方法反转,不用转字符串,空间复杂度降到O(1),时间还是O(n):

def reverse_int(num):
    sign = -1 if num < 0 else 1
    num = abs(num)
    reversed_num = 0
    while num > 0:
        reversed_num = reversed_num * 10 + num % 10
        num = num // 10
    return sign * reversed_num

内容的提问来源于stack exchange,提问作者JPcoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 09:15:11