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

为何同逻辑的全排列递归代码C++运行正常Python输出全为原数组?

问题原因

Python中列表属于可变对象,你代码里直接执行arr.append(nums)时,实际是把nums的内存引用追加到了结果列表里,没有保存当前时刻的数组值。后续回溯过程中对nums的交换修改会同步影响所有已经追加到arr里的引用值,等递归全部执行完毕时nums会被回溯回初始状态,自然所有结果都和初始输入一致。
C++中追加数组/vector时默认是值拷贝,所以相同逻辑不会出问题。

修复方法

只需要修改追加到结果列表的逻辑,存储当前nums的副本即可:
把arr.append(nums)改为arr.append(nums.copy()) 或者arr.append(nums[:]),两种写法都可以生成当前数组的副本,对整数数组场景足够使用。

修复后完整代码
from typing import List

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        arr = []
        def per(nums,i):
            if i == len(nums)-1:
                # 追加当前数组的副本,避免后续修改影响已存储的结果
                arr.append(nums.copy())
                return
            for j in range(i,len(nums)):
                nums[i],nums[j] = nums[j],nums[i]
                per(nums,i+1)
                nums[i],nums[j] = nums[j],nums[i]
        per(nums,i=0)
        return arr

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:42:03