app网站建设思路,桂林网站制作,建设银行 网站怎么打不开了,精选赣州网站建设目录 1. 题目#xff1a;2. 我的代码#xff1a;小结#xff1a; 1. 题目#xff1a; 给定一个可包含重复数字的序列 nums #xff0c;按任意顺序 返回所有不重复的全排列。
示例 1#xff1a; 输入#xff1a;nums [1,1,2] 输出#xff1a; [[1,1,2], [1,2,1], [2,1… 目录 1. 题目2. 我的代码小结 1. 题目 给定一个可包含重复数字的序列 nums 按任意顺序 返回所有不重复的全排列。
示例 1 输入nums [1,1,2] 输出 [[1,1,2], [1,2,1], [2,1,1]] 示例 2 输入nums [1,2,3] 输出[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 2. 我的代码
class Solution:def permuteUnique(self, nums: List[int]) - List[List[int]]:# 回溯path []result []def backtracking(rest):# 终止条件if rest []:result.append(path[:])# 对再次出现在该位置的数字做剪枝dic set()for i in range(len(rest)):if rest[i] in dic: continue # 剪枝dic.add(rest[i])path.append(rest[i])backtracking(rest[:i] rest[i 1:])path.pop()backtracking(nums)return result这个题继续使用回溯算法只不过要配合剪枝操作。在每一层定义一个set作为遍历过的元素的记录如果不在记录中则可以递归如果在记录中则直接剪枝continue。
为什么要剪枝呢因为如果相同元素在次位置再递归一次则会产生和之前递归过的一模一样的分支。继续将遍历完整个列表作为终止条件即可。
以树形结构展示为下图 小结 关注我给大家分享更多有趣的知识以下是个人公众号提供 ||代码兼职|| ||代码问题求解|| 添加我的公众号即可