题解 | #没有重复项数字的全排列#

没有重复项数字的全排列

https://www.nowcoder.com/practice/4bcf3081067a4d028f95acee3ddcd2b1

#纠正官方答案python中的错误
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param num int整型一维数组
# @return int整型二维数组
#
class Solution:
    def permute(self, num: List[int]) -> List[List[int]]:
        # 先按字典序排序
        num.sort()
        res = list(list())
        # 递归获取
        self.recursion(res, num, 0)
        return res

    # write code here
    def recursion(self, res, num, index):
        # 分枝进入结尾,找到一种排列
        if index == len(num) - 1:
            # k = num.copy() #官方答案还有一个错误的地方是res.append()的是同一个num地址,导致最后答案res里面元素都是一样的
			#后面的改动同时让这里不需要copy()了,因为切片的同时已经重新创建了一个列表
            res.append(num)
        else:
            # 遍历后续的元素
            for i in range(index, len(num)):
                # 交换二者
				#这里是与官方答案不同的地方,交换的是一个元素与它前面的元素列 而不是两个元素 这样能保证后面的元素列一直是字典序
				#num可以分解为num[:index] + num[index:i] + [num[i]] + num[i + 1 :] 交换第二和第三个
                num = num[:index] + [num[i]] + num[index:i] + num[i + 1 :]
                # 继续往后找
                self.recursion(res, num, index + 1)
                # 回溯
                num = num[:index] + num[index + 1 : i + 1] + [num[index]] + num[i + 1 :]

全部评论

相关推荐

比亚迪汽车新技术研究院 硬件工程师 总包21左右 硕士
点赞 评论 收藏
分享
10-28 11:04
已编辑
美团_后端实习生(实习员工)
一个2人:我说几个点吧,你的实习经历写的让人觉得毫无含金量,你没有挖掘你需求里的 亮点, 让人觉得你不仅打杂还摆烂。然后你的简历太长了🤣你这个实习经历看完,估计没几个人愿意接着看下去, sdk, 索引这种东西单拎出来说太顶真了兄弟,好好优化下简历吧
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务