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], [2,1,1] ] 思路1.这题与Permutations的区别在于他允许重复数字,最简单的就是利用1的结果,保存在一个set中,去重复后保存结果,但不够理想。 思路2. 对数组先进行排序,如果有重复数字,则跳过,需要注意的是,因为排序,如果采用引用传递,则会破坏排序,所以使用值传递。当然也可以使用引用传递,但每次传递后,把交换的数据交换回来并且对后序数组再进行排序。
class Solution { public: vector<vector<int>> permuteUnique(vector<int>& nums) { vector<vector<int>> result; sort(nums.begin(),nums.end()); permuteRec( 0, nums, result); return result; } private: void permuteRec( 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] ); permuteRec( start+1, nums, result); } } };
时间: 2024-10-13 11:55:16