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

回溯法跟踪答案异常排查:IP地址恢复Python代码求助

问题分析与解决方案

你遇到的问题根源在于Python中列表是可变对象,传递的是引用而非值。你的回溯逻辑本身是正确的,但在将path添加到self.ans时,直接添加了对原列表的引用,后续的path.pop()操作会修改这个引用指向的列表,最终导致self.ans里的所有元素都变成了空列表。

具体原因

当你执行self.ans.append(path)时,并没有把path当前的内容复制一份存到ans里,而是把path这个列表的"地址"存了进去。后续回溯过程中,path.pop()会不断移除元素,最后path被清空,而ans里的所有元素都是指向同一个path对象的引用,所以最终输出就是[[], []]。

修复方法

只需要在添加到ans时,创建一个path的副本即可。可以用以下几种方式实现:

  • self.ans.append(path.copy())
  • self.ans.append(list(path))
  • self.ans.append(path[:])

修改后的完整代码

class Solution:
    def restore_ip(self, s):
        self.ans = []
        self.backtrack([], s)
        return self.ans
    def backtrack(self, path, s):
        if s == "" and len(path) == 4:
            # 添加path的副本,而不是引用
            self.ans.append(path.copy())
            return
        if s == "" or len(path) >= 4:
            return
        for i in range(1, len(s)+1):
            if i > 3:
                break
            if int(s[:i]) > 255:
                break
            if i != 1 and s[0] == 0:
                break
            path.append(s[:i])
            self.backtrack(path, s[i:])
            path.pop()
a = Solution()
print(a.restore_ip("25525511135"))

运行结果

执行修改后的代码,会输出你期望的结果:

[['255', '255', '11', '135'], ['255', '255', '111', '35']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 00:07:32