leetcode 47. 全排列 II

给定一个可包含重复数字的序列,返回所有不重复的全排列。

示例:

输入: [1,1,2]
输出:
[
  [1,1,2],
  [1,2,1],
  [2,1,1]
]


思路和上一题类似,知识这里要判断当前元素是否在前面出现过
http://www.cnblogs.com/mr-stn/p/8996779.html
 1 class Solution {
 2 public:
 3    bool contain(vector<int>nums, int i, int j){
 4        for(int k = i; k < j; k++)
 5            if(nums[j] == nums[k]) return true;
 6        return false;
 7    }
 8     void permuteUnique(vector<int>&nums, vector<vector<int>>& ans, int begin, int end){
 9         if(begin == end){
10             ans.push_back(nums);
11             return;
12         }else{
13             for(int i = begin; i <= end; i++){
14                 if(contain(nums, begin, i)) continue;
15                 swap(nums, begin, i);
16                 permuteUnique(nums, ans, begin+1, end);
17                 swap(nums, begin, i);
18             }
19         }
20     }
21     
22     void swap(vector<int>& nums, int i, int k){
23         int temp = nums[i];
24         nums[i] = nums[k];
25         nums[k] = temp;
26     }
27     
28     vector<vector<int>> permuteUnique(vector<int>& nums) {
29         vector<vector<int>> ans;
30         int len = nums.size()-1;
31         permuteUnique(nums, ans, 0, len);
32         return ans;
33     }
34 };

猜你喜欢

转载自www.cnblogs.com/mr-stn/p/8996947.html