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

没有重复项数字的全排列

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 :]

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-18 12:01
点赞 评论 收藏
分享
写不来代码的小黑:这么小的城市能有做it的公司也不容易
点赞 评论 收藏
分享
小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务