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
相关产品推荐
相关产品推荐

