题目:

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. Bootstrp--一个导航面板切换的实用例子

    <!--导航区开始--> <ul class="nav nav-tabs nav-stacked" role="tablist"> &l ...

  2. android 获取手机设备品牌

    在有些数据要获取手机设备是什么品牌,特别做一些适配的时候,好了就讲下怎样或者手机是什么品牌: String brand =android.os.Build.BRAND; 就这么简单!

  3. springboot 项目中控制台打印日志以及每天生成日志文件

    1.控制台打印sql语句 只要在application.properties 中加入<configuration  scan="true" scanPeriod=" ...

  4. Java的Executor框架和线程池实现原理

    Java的Executor框架 1,Executor接口 public interface Executor { void execute(Runnable command); } Executor接 ...

  5. Kindeditor 修改内容时如何不让&nbsp;及 <> 被自动转义

    $html = str_replace(' ', '&nbsp;', $html); $html = str_replace('>', '&gt;', $html); $html ...

  6. intellij idea 大内存优化配置 idea64.exe.vmoptions文件配置

    -ea-server-Xms2G-Xmx4096M-Xss2m-XX:MaxMetaspaceSize=2G-XX:ReservedCodeCacheSize=1G-XX:MetaspaceSize= ...

  7. idea创建普通java项目以及maven创建项目过程(转)

    1. idea创建一个普通项目流程 http://blog.csdn.net/testcs_dn/article/details/52303941 2. idea创建maven项目流程 http:// ...

  8. Richard Stallman's computer

    What hardware do you use? I am using a Lemote Yeelong, a netbook with a Loongson chip and a 9-inch d ...

  9. CMMI过程改进反例

     近期一直在看CMMI的资料,越看认为越有意思.今天看到过程改进的时候,突然想起来之前所在的公司发生的过程改进相关的事儿来. 公司通过CMMI3级认证之后.PMO部门经理(公司还有质量管理部门经理 ...

  10. ubuntun下安装sublime text

    Sublime Text 3 是一款轻量级.跨平台的文本编辑器.可安装在ubuntu,Windows和MAC OS X上高级文本编辑软件,有一个专有的许可证,但该程序也可以免费使用,无需做逆向工程.如 ...