Permutations II

Description:

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].

Solution:

class Solution {
public:
	vector<vector<int>> permuteUnique(vector<int>& nums) {
		sort(begin(nums), end(nums));
		vector<vector<int>> rc;
		permute(rc, nums, 0);
		return rc;
	}
	
private:
	void permute(vector<vector<int>>& result, vector<int> nums, int k) {
		auto sz = (int)nums.size();
		if (k >= sz-1) {
			result.push_back(nums);
			return;
		}
		permute(result, nums, k+1);
		for (int i = k+1; i < sz; ++i) {
			if (nums[i] != nums[k]) {
				swap(nums[k], nums[i]);
				permute(result, nums, k+1);
			}
		}
	}
};

class Solution {
public:
	vector<vector<int>> permuteUnique(vector<int>& nums) {
		sort(begin(nums), end(nums));
		vector<vector<int>> rc;
		do {
			rc.push_back(nums);
		} while (next_permutation(begin(nums), end(nums)));
		return rc;
	}
};
posted @ 2015-08-29 05:02  影湛  阅读(138)  评论(0编辑  收藏  举报