题目:给定一个可包含重复数字的序列,返回所有不重复的全排列。

示例: 输入:[1,1,2]输出:[[1,1,2],[1,2,1],[2,1,1]]

来源:https://leetcode-cn.com/problems/permutations-ii/

法一:自己的代码

思路:要学会画树状图来观察数据的特征和结构,通过画图可以发现要先对list排序,如果发现某个数字连续出现了两次,则没有必要继续回溯了用continue结束本次for循环.

class Solution:
def permute(self, nums):
resluts = []
# 这个问题必须要排序
nums = sorted(nums)
l = len(nums)
# 注意这里的nums如果不初始化的话,要放在a的前边,否则报错.
def backtrack(a=[], nums=nums):
# 深度优先遍历,即回溯终止的条件
if len(a) == l:
resluts.append(a)
return
for j,i in enumerate(nums):
# 通过观察可以发现,每次回溯的时候,不管是外面的大循环还是里面的小循环,
# 比如3在[0,3,3,3]中出现了三次,如果3连续出现了两次这个时候就没必要再循环了
if (j !=0) & (nums[j] == nums[j-1]):
# 之前用return是错误的,因为这里仅仅是想结束一次for循环,
# 如果用return的话,直接结束了回溯函数
#return
continue
# 每次回溯前,都将该数删除,为了下次回溯for循环的时候不再用
# 这里没有用状态重置是因为 回溯时用了r来赋值给nums,每次回溯结束后仍然是原来的状态
r = nums.copy()
del r[j]
# 这里的i必须加[]
# backtrack( a+[i], [k for k in nums if k != i])
backtrack( a+[i], r, )
backtrack()
return resluts
if __name__ == "__main__":
duixiang = Solution()
a = duixiang.permute([3,3,0,3])
# a = duixiang.permute([1,1,2])
print(a)

47全排列II的更多相关文章

  1. 47. 全排列 II

    47. 全排列 II 题意 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]] 解题思路 去重的全排列 ...

  2. Leetcode之回溯法专题-47. 全排列 II(Permutations II)

    Leetcode之回溯法专题-47. 全排列 II(Permutations II) 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2] 输出: [ [1,1,2] ...

  3. [LeetCode] 47. 全排列 II

    题目链接 : https://leetcode-cn.com/problems/permutations-ii/ 题目描述: 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [ ...

  4. Java实现 LeetCode 47 全排列 II(二)

    47. 全排列 II 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ] class Solut ...

  5. leetcode 46. 全排列 及 47. 全排列 II

    46. 全排列 问题描述 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3 ...

  6. LeetCode 47 全排列II

    题目: 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ] 解题思路: 与上一题相比,这题多了一 ...

  7. Leetcode题库——47.全排列II

    @author: ZZQ @software: PyCharm @file: permuteUnique.py @time: 2018/11/16 13:34 要求:给定一个可包含重复数字的序列,返回 ...

  8. LeetCode 47. 全排列 II(Permutations II)

    题目描述 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ] 解题思路 类似于LeetCode4 ...

  9. LeetCode 47——全排列 II

    1. 题目 2. 解答 在 LeetCode 46--全排列 中我们已经知道,全排列其实就是先确定某一个位置的元素,然后余下就是一个子问题.在那个问题中,数据没有重复,所以数据中的任意元素都可以放在最 ...

随机推荐

  1. 二,kubernetes集群的安装初始化

    目录 部署 集群架构示意图 部署环境 kubernetes集群部署步骤 基础环境 基础配置 安装基础组件 配置yum源 安装组件 初始化 master 设置docker和kubelet为自启动(nod ...

  2. java8学习之Stream陷阱剖析

    上一次[http://www.cnblogs.com/webor2006/p/8297603.html]在最后用stream.iterate()生成了6个奇数,接着基于它来实现如下需求:找出该流中大于 ...

  3. @InitBinder的作用

    由@InitBinder表示的方法,可以对WebDataBinder对象进行初始化.WebDataBinder是DataBinder的子类,用于完成由表单到JavaBean属性的绑定. @InitBi ...

  4. 关于@wraps(fn)

  5. 【CF765E】Tree Folding

    题目大意:给定一棵 N 个节点的无根树,边权都是 1,可以把树上父亲相同的两条长度相同的链合并,问最后是否可以合并成一条链,如果可以,输出链的最小长度,否则输出 -1. 题解: ​由于我们不知道最后的 ...

  6. python fc21~fc29踩坑记录

    最近在公司的linux fc21上安装python和anaconda, 直接mintmenu给挂掉了. 真是弱爆了. 后来,升级终于来了, 升到了fc29.好,再看看, python2.7还在, py ...

  7. python--Excel模块xlwings

    安装:pip install xlwings 基本操作: xlwings的特色: xlwings能够非常方便的读写Excel文件中的数据,并且能够进行单元格格式的修改 可以和matplotlib以及p ...

  8. Python&R:警告信息管理

    计算机程序有时很人性化,比如给你警告提示信息: 计算机程序有时又非常不人性化,比如动不动就给你警告提示...... 如果你的程序是要给客户使用,有运行美化要求: 再尤其是比如警告出现在循环里的情况,那 ...

  9. C# 跨窗体事件

    跨窗体事件:例如从一个窗体改变另一个窗体button的颜色,首先需要将需要改变button的属性改为public using System; using System.Drawing; using S ...

  10. 科普TPF知识

    https://tieba.baidu.com/p/4926092734?see_lz=1&pn=1 707680700 https://tieba.baidu.com/p/492609273 ...