题目:

Given a collection of numbers that might contain duplicates, return all possible unique permutations.

For example,
[1,1,2] have the following unique permutations:

[
[1,1,2],
[1,2,1],
[2,1,1]
]

  

题解:

Solution 1 (TLE)

class Solution {
public:
void dfs(vector<int> nums, vector<vector<int>>& vv, vector<int>& v, vector<int>& visited, int level) {
if(level >= nums.size()) {
if(find(vv.begin(), vv.end(), v) == vv.end())
vv.push_back(v);
return;
}
for(int i=; i<nums.size(); ++i) {
if(visited[i] != ) continue;
v.push_back(nums[i]);
visited[i] = ;
dfs(nums, vv, v, visited, level+);
v.pop_back();
visited[i] = ;
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<vector<int>> vv;
vector<int> v, visited(nums.size(),);
dfs(nums, vv, v, visited, );
return vv;
}
};

Solution 2 ()

class Solution {
public:
void dfs(vector<int> nums, vector<vector<int>>& vv, vector<int>& v, vector<int>& visited, int level) {
if(level >= nums.size()) {
vv.push_back(v);
return;
}
for(int i=; i<nums.size(); ++i) {
if(visited[i] != ) continue;
if(i> && nums[i] == nums[i-] && visited[i-] == ) continue;
v.push_back(nums[i]);
visited[i] = ;
dfs(nums, vv, v, visited, level+);
v.pop_back();
visited[i] = ;
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<vector<int>> vv;
vector<int> v, visited(nums.size(),);
sort(nums.begin(), nums.end());
dfs(nums, vv, v, visited, );
return vv;
}
};

Solution 3 ()

class Solution {
public:
void dfs(vector<int> nums, set<vector<int>>& sv, int level) {
if(level >= nums.size()) {
sv.insert(nums);
return;
}
for(int i=level; i<nums.size(); ++i) {
if(i != level && nums[i] == nums[level]) continue;
swap(nums[i], nums[level]);
dfs(nums, sv, level+);
swap(nums[i], nums[level]);
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
set<vector<int>> sv;
vector<int> v, visited(nums.size(),);
sort(nums.begin(), nums.end());
dfs(nums, sv, );
return vector<vector<int>> (sv.begin(), sv.end());
}
};

Solution 4 ()

class Solution {
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<vector<int>> ans;
vector<int> aux(nums.begin(), nums.end());
sort(aux.begin(), aux.end());
do {
ans.emplace_back(aux.begin(), aux.end());
} while(next_permutation(aux.begin(), aux.end()));
return ans;
}
};

【LeetCode】047. Permutations II的更多相关文章

  1. 【LeetCode】47. Permutations II 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:递归 方法二:回溯法 日期 题目地址:htt ...

  2. 【LeetCode】47. Permutations II

    Permutations II Given a collection of numbers that might contain duplicates, return all possible uni ...

  3. 【一天一道LeetCode】#47. Permutations II

    一天一道LeetCode系列 (一)题目 Given a collection of numbers that might contain duplicates, return all possibl ...

  4. 【LeetCode】90. Subsets II 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 回溯法 日期 题目地址:https://leet ...

  5. 【LeetCode】Two Sum II - Input array is sorted

    [Description] Given an array of integers that is already sorted in ascending order, find two numbers ...

  6. 【LeetCode】基本计算器II

    [问题]实现一个基本的计算器来计算一个简单的字符串表达式的值.字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格  .整数除法仅保留整数部分. 输入: "3+2*2" ...

  7. 【LeetCode 】N皇后II

    [问题]n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法.给定一个整数 n,返回 n 皇后不同的解决方案的数量. 示例: ...

  8. 【LeetCode】跳跃游戏II

    [问题]给定一个非负整数数组,你最初位于数组的第一个位置.数组中的每个元素代表你在该位置可以跳跃的最大长度.你的目标是使用最少的跳跃次数到达数组的最后一个位置. 示例: 输入: [,,,,] 输出: ...

  9. 【LeetCode】52. N-Queens II(位运算)

    [题意] 输出N皇后问题的解法个数. [题解] 解法一:传统dfs回溯,模拟Q放置的位置即可,应该不难,虽然能通过,但是时间复杂度很高. 解法二:位运算大法好! 首先要明白这道题里两个核心的位运算 1 ...

随机推荐

  1. hdu 1203 I NEED A OFFER!(01背包)

    题意:"至少一份offer的最大概率".即求拿不到offer的最小概率 (得到offer的最大概率 = 1 - 反例的最小概率). 状态转移方程:dp[j]= Min(dp[j], ...

  2. 兔子--改动Android Studio的快捷键,改动成eclipse的快捷键

    仅仅须要2步 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzQyNTUyNw==/font/5a6L5L2T/fontsize/400/fill ...

  3. html用jquery获取屏幕宽度与滚动条的关系

    当内容高度超过屏幕高度时,获取的屏幕宽度不包括滚动条.即使是浮动,也要显式设置高度,才会全屏. 未超过时,获取的宽度包括滚动条.

  4. 【转】Android中的Apk的加固(加壳)原理解析和实现

    一.前言 今天又到周末了,憋了好久又要出博客了,今天来介绍一下Android中的如何对Apk进行加固的原理.现阶段.我们知道Android中的反编译工作越来越让人操作熟练,我们辛苦的开发出一个apk, ...

  5. 再说WCF Data Contract KnownTypeAttribute

    WCF 中的序列化是用DataContractSerializer,所有被[DataContract]和[DataMemeber]标记的类和属性会被DataContractSerializer序列化. ...

  6. Python 深入剖析SocketServer模块(二)(V2.7.11)

    五.Mix-In混合类 昨天介绍了BaseServer和BaseRequestHandler两个基类,它们只用与派生,所以贴了它们派生的子类代码. 今天介绍两个混合类,ForkingMix-In 和 ...

  7. EasyPlayerPro(Windows)流媒体播放器开发之ffmpeg log输出报错

    EasyPlayerPro主要基于ffmpeg进行开发,在EasyPlayerPro开发过程中,曾遇到一个相对比较棘手的问题,该问题一般在播放不是很标准的流或者网络情况较差,容易出现丢帧的情况特别容易 ...

  8. 用 Apache POI 读取 XLSX 数据

    最近因为项目的原因,需要从一些 Microsoft Office Excel 文件读取数据并加载到数据库. Google了一下方法,发现其实可以用的 Java 第三方库很多,最著名的是 Apache ...

  9. 在JavaScript中闭包的作用和简单的用法

    在JavaScript中闭包的作用和简单的用法 一.闭包的简介 作用域链:在js中只有函数有作用域的概念,由于函数内能访问函数外部的数据,而函数外部不能访问函数内部的数据,由上述形成一种作用域访问的链 ...

  10. Django+ajax+jsonp实现借口调用文本处理

    首页 提交 <script src="/static/jquery-2.1.4.min.js"></script> <script type=&quo ...