给定一个可包含重复数字的序列,返回所有不重复的全排列。
示例:
输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ]
这个解法虽然反复拷贝了容器,但是效率不见得差,因为反正你要把容器 扔到result里,总是需要一个容器保存临时结果,与其反复地push和pop,不如就用本身来代替这个临时容器。 class Solution { public: vector<vector<int>> permuteUnique(vector<int>& nums) { vector<vector<int>> result; sort(nums.begin(),nums.end()); allRange( 0, nums, result); return result; } void allRange(int start, vector<int> nums, vector<vector<int>> &result) { if( start >= nums.size()) { result.push_back(nums); return; } for( int i = start; i < nums.size(); i++ ) { if( i > start && nums[i] == nums[start]) continue; swap( nums[start], nums[i] ); allRange( start+1, nums, result); } } };