题目:permuteUnique
要求:
给出一个具有重复数字的列表,找出列表所有不同的排列。样例:
给出列表 [1,2,2],不同的排列有:[ [1,2,2], [2,1,2], [2,2,1]]算法要求:
使用递归和非递归分别完成该题。解题思路:
我是直接在全排列基础上改的。算法如下:
vector<vector<int> > mainVec; int size; void permute(vector<int> &nums, int m) { int temp; if (m == nums.size()) { for (int i = 0; i < size; i++) { if (mainVec[i] == nums) { return; } } size++; mainVec.push_back(nums); } else { for (int i = m; i < nums.size(); i++) { temp = nums[m]; nums[m] = nums[i]; nums[i] = temp; permute(nums, m+1); temp = nums[m]; nums[m] = nums[i]; nums[i] = temp; } } } vector<vector<int> > permuteUnique(vector<int> nums) { mainVec.clear(); size = 0; permute(nums, 0); return mainVec; }