[Leetcode] 47. Permutations II 解题报告
来源:互联网 发布:程序员电脑桌面壁纸 编辑:程序博客网 时间:2024/06/06 07:06
题目:
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]]
思路:
1、next_permutation法:由于next_permutation的实现中已经考虑到了去除重复元素,所以基于next_permutation的方法可以直接套用。但如果有了重复元素,则permutations的数量就不再是n!了,具体解法参见Leetcode 46中的思路2。
2、回溯法:首先对数组进行排序,保证相同元素都出现在相邻位置上;然后在循环过程中对每一个尚未添加的元素进行深搜和回溯,但注意对某一个元素进行深搜和回溯之后,需要跳过后面所有和它相同的元素。这是因为对后续相同元素深搜所能得到的结果在前一步的深搜中已经全部找出来了。建议读者将该题和我Leetcode 40解题报告的思路2对照起来理解。目测该范式可以推广到“求包含相同元素的数组的符合条件的子集”的一类题目中。
代码:
2、回溯法:
class Solution {public: vector<vector<int>> permuteUnique(vector<int>& nums) { vector<vector<int>> ret; sort(nums.begin(), nums.end()); vector<bool> visited(nums.size(), false); vector<int> line; dfs(nums, visited, ret, line, 0); return ret; }private: void dfs(vector<int> &nums, vector<bool> &visited, vector<vector<int>> &ret, vector<int> &line, int index) { if(index == nums.size()) { ret.push_back(line); return; } for(int i = 0; i < nums.size(); ++i) { if(visited[i]) continue; line.push_back(nums[i]); visited[i] = true; dfs(nums, visited, ret, line, index + 1); visited[i] = false; line.pop_back(); while(i + 1 < nums.size() && nums[i + 1] == nums[i]) i++; } }};
0 0
- [leetcode] 47. Permutations II 解题报告
- [Leetcode] 47. Permutations II 解题报告
- [leetcode]47. Permutations II@Java解题报告
- 【LeetCode】Permutations II 解题报告
- [LeetCode] Permutations II 解题报告
- Permutations II [Leetcode 解题报告]
- Leetcode #47. Permutations II 全排列2 解题报告
- [LeetCode]Permutations,解题报告
- 【LeetCode】Permutations 解题报告
- LeetCode-Permutations-解题报告
- [LeetCode] Permutations 解题报告
- Permutations [Leetcode 解题报告]
- [leetcode] 46. Permutations 解题报告
- LeetCode 46. Permutations 解题报告
- [Leetcode] 46. Permutations 解题报告
- leetCode 47.Permutations II (排列组合II) 解题思路和方法
- [LeetCode]47.Permutations II
- LeetCode 47.Permutations II
- TODO:小程序的使用体验
- JSF Converter介绍与使用
- DEDECMS 管理员帐号重设工具
- Flask-admin使用经验技巧总结
- Android 6.0 动态权限实战(二 - 终结章 - 高手必看!)------ 关于动态权限的正确使用与理解
- [Leetcode] 47. Permutations II 解题报告
- Python Notebook简介
- 解决json中文乱码问题
- windows下修改磁盘扇区数据
- Java基本数据类型总结
- Java 获取IP/MAC地址等网络信息的方法
- AndroidStudio打包跑出来一堆错误解决方法:
- 【杭电OJ从头刷】HDU1002
- sql server常用查询