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

没有重复项数字的全排列

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

全部评论

相关推荐

05-29 22:11
门头沟学院 Java
Elastic90:抛开学历造假不谈,这公司的招聘需求也挺怪的,Java开发还要求你有图文识别、移动端开发和c++的经验,有点逆天了。
点赞 评论 收藏
分享
Rena1ssanc...:对的,要是面评没太烂,勤更新简历等捞就行了,腾讯可以无限复活
点赞 评论 收藏
分享
07-07 11:33
江南大学 Java
已经在暑假实习了 ,没有明确说有hc,纠结实习到八月份会不会有点影响秋招毕竟感觉今年好多提前批
程序员小白条:92的话准备提前批,其他没必要,没面试机会的,而且你要准备充分,尤其八股和算法题
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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