[Leetcode 47, Hard] Permutations II
2015-08-03 23:44
465 查看
Problem:
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
and
Analysis:
解法是Permutations I解法的变种。首先把数组排序。这样做的原因是可以在每次递归的时候方便去重(重复的元素不重复参与递归)。在每次递归的时候,都记录下当前已经参与过递归过的元素,并从这个元素起寻找下一个需要参与递归的元素。当当前指标是0的时候,就把得到permutation加入结果集合。(结果暂时有问题?待查!)
Solutions:
C++:
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],
and
[2,1,1].
Analysis:
解法是Permutations I解法的变种。首先把数组排序。这样做的原因是可以在每次递归的时候方便去重(重复的元素不重复参与递归)。在每次递归的时候,都记录下当前已经参与过递归过的元素,并从这个元素起寻找下一个需要参与递归的元素。当当前指标是0的时候,就把得到permutation加入结果集合。(结果暂时有问题?待查!)
Solutions:
C++:
void GeneratePermutate(vector<int>& candidate_permutate, int end_index, vector<vector<int> >& results) { if(end_index == 0) results.push_back(candidate_permutate); else { int used_element = candidate_permutate[end_index]; for(int i = end_index; i >= 0; --i) { if(i < end_index && candidate_permutate[i] == used_element) { for(; i >= 0; --i) { if(candidate_permutate[i] != used_element) break; } if(i < 0) continue; } used_element = candidate_permutate[i]; swap(candidate_permutate[end_index], candidate_permutate[i]); GeneratePermutate(candidate_permutate, end_index - 1, results); swap(candidate_permutate[end_index], candidate_permutate[i]); } } } vector<vector<int> > permuteUnique(vector<int> &num) { vector<vector<int> > results; if(num.empty()) return results; sort(num.begin(), num.end()); GeneratePermutate(num, num.size() - 1, results); return results; }
相关文章推荐
- CSS3 -webkit-transform(元素变换)
- maven的resource配置(一)
- hdu5314 Happy King
- CSS3 transform 属性
- 类的继承
- 自动登陆ftp服务器的批处理怎么写
- CSS3详解:transform
- OpenGL: 渲染管线理论
- C++ 函数重载
- linux tar命令
- PHP-逻辑运算符
- hd1016 Prime Ring Problem
- static /const
- POJ 1741 Tree + POJ 1987 Distance Statistics【树的点分治】
- linux编程常用的函数
- HDU 5336——XYZ and Drops——————【广搜BFS】
- 杭电2097 sky数水过
- jquery 怎么获取服务器控件ID
- 磁盘 IO 性能 调优 多线程
- mysql之日志和mysqlbinlog工具的使用