47全排列II
题目:给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例: 输入:[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的更多相关文章
- 47. 全排列 II
47. 全排列 II 题意 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]] 解题思路 去重的全排列 ...
- Leetcode之回溯法专题-47. 全排列 II(Permutations II)
Leetcode之回溯法专题-47. 全排列 II(Permutations II) 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2] 输出: [ [1,1,2] ...
- [LeetCode] 47. 全排列 II
题目链接 : https://leetcode-cn.com/problems/permutations-ii/ 题目描述: 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [ ...
- Java实现 LeetCode 47 全排列 II(二)
47. 全排列 II 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ] class Solut ...
- leetcode 46. 全排列 及 47. 全排列 II
46. 全排列 问题描述 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3 ...
- LeetCode 47 全排列II
题目: 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ] 解题思路: 与上一题相比,这题多了一 ...
- Leetcode题库——47.全排列II
@author: ZZQ @software: PyCharm @file: permuteUnique.py @time: 2018/11/16 13:34 要求:给定一个可包含重复数字的序列,返回 ...
- LeetCode 47. 全排列 II(Permutations II)
题目描述 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ] 解题思路 类似于LeetCode4 ...
- LeetCode 47——全排列 II
1. 题目 2. 解答 在 LeetCode 46--全排列 中我们已经知道,全排列其实就是先确定某一个位置的元素,然后余下就是一个子问题.在那个问题中,数据没有重复,所以数据中的任意元素都可以放在最 ...
随机推荐
- 一,Devops核心要点及kubernetes的架构概述
目录 1,devops的简述及要点 2,kubernetes的简单介绍与组成 特性 集群构成 pod的基本概念 kubernetes网络 1,devops的简述及要点 DevOps,分层架构 ---& ...
- MMU功能解析、深入剖析、配置与使用
MMU = memory management unit 1.把虚拟地址转化成物理地址,防止地址冲突 2.访问权限管理 MMU把一个虚拟地址的20位到31位作为取出来,建立 一张表,叫做transla ...
- 05-spring框架—— Spring 事务
5.1 Spring 的事务管理 事务原本是数据库中的概念,在 Dao 层.但一般情况下,需要将事务提升到业务层,即 Service 层.这样做是为了能够使用事务的特性来管理具体的业务. 在 Spri ...
- vue 中 弹幕的播放
前言 最近在搞弹幕的问题,小程序上的和vue上的,不想使用插件,于是自己摸索了一下,其实包括 2中弹幕形式 有序和无序的 直接上代码吧 <!-- 弹幕 --> <template v ...
- qt5--QLabel标签控件
需要 #include <QLabel> label->setFrameShape(QFrame::Box); //设置边框 边框样式参看:https://www.cnblo ...
- ICSharpCode.SharpZipLib.Zip 压缩文件
public class ZipFileHelper { List<string> urls = new List<string>(); void Director(strin ...
- [Linux系统] (8)Nginx
一.高并发基础架构 简要流程: 1.客户端发请求. 2.又LVS等四层负载均衡系统将请求转发给不同的Nginx服务器. 3.Nginx与客户端建立TCP连接,拿到请求后分析URI,然后将其转发给对应的 ...
- C# 获取 与 修改 web.config中的值(修改Xml文件)
定义web.config 中 appSettings 节点 <appSettings> <add key="domainExist" value="fa ...
- Jmeter(二) Jmeter组件介绍
一.测试计划 测试的起点,同时也是其他所有组件的容器 二.线程(用户) Setup 线程组:一种特殊类型的线程,可用于执行预测试操作.即执行测试前进行定期线程组的执行 Teardown 线程组:一种特 ...
- CodeForces - 28C Bath Queue 概率与期望
我概率期望真是垃圾--,这题搞了两个钟头-- 题意 有\(n\)个人,\(m\)个浴室,每个浴室里有\(a_i\)个浴缸.每个人会等概率随机选择一个浴室,然后每个浴室中尽量平分到每个浴缸.问期望最长排 ...