[LeetCode]Permutations II
2015-11-22 17:02
267 查看
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
and
[思路]DFS搜寻解,和之前不同的是要判断重复解的情况。
去重的全排列就是从第一个数字起每个数分别与它后面非重复出现的数字交换。
之前交换过那就会导致后续解和之前出现重复解。
For example,
[1,1,2]have the following unique permutations:
[1,1,2],
[1,2,1],
and
[2,1,1].
[思路]DFS搜寻解,和之前不同的是要判断重复解的情况。
去重的全排列就是从第一个数字起每个数分别与它后面非重复出现的数字交换。
之前交换过那就会导致后续解和之前出现重复解。
class Solution { public: vector<vector<int>> permuteUnique(vector<int>& nums) { vector<vector<int>> ret; recursion(nums,0,ret); return ret; } void recursion(vector<int> &nums,int index,vector<vector<int>> &ret){ if(index == nums.size()-1){ ret.push_back(nums); return; } for(int i=index; i<nums.size(); ++i){ if(dupsolution(nums,index,i)) continue; swap(nums[index],nums[i]); recursion(nums,index+1,ret); swap(nums[i],nums[index]); } } void swap(int &a,int &b){ int temp = a; a = b; b = temp; } bool dupsolution(vector<int> nums,int step,int end){ //如果在[index,j)中出现和j一样的值,说明对j的交换操作在之前出现过,是其重复解 for(int i=step; i<end; ++i){ if(nums[i] == nums[end]) return true; } return false; } };
相关文章推荐
- NYOJ-958山谷(二)【模拟】
- LeetCode 063 Unique Paths II
- Jade之Filters
- 【Effective C++】让自己习惯C++
- Android(13)java中的线程回顾,Android线程,主线程(UI线程)
- 不要去打扰别人的幸福
- Android基础入门教程——9.4 使用MediaRecord录音
- Shader 学究
- 有联系的jQuery选择器
- ubuntu14.04配置Hive1.2.1
- Jade之Extends
- ubuntu14.04配置Hive1.2.1
- maximalRectangle
- 【poj2459】Feed Accounting
- NYOJ-755山谷【模拟】
- Hibernate 映射关系 ---One2Many单向关联
- POJ1679The Unique MST(次小生成树)
- Jade之Doctype
- Jade之Case
- 【XFeng安卓开发笔记】四大基本组件——跨应用启动service