力扣-47-全排列Ⅱ
阿新 • • 發佈:2022-12-09
好像相對於全排列唯一的不同就是包含了重複元素,這樣的話會與原題有什麼區別呢?
明明每次都選擇了不同的元素,但是因為有元素相同,所以最終的結果卻出現了重複值
然後因為這裡是在意序列順序、定長的,所以不能像之前做組合一樣,直接從後面選、或者排序再從後面選什麼的
這裡用排序+交換?我嘗試這麼寫了,但是很明顯就出問題了,這倆不能同時用,因為交換會破壞原本的有序序列
用交換的本意是省去對於已經選擇元素的標記
class Solution { vector<vector<int>> ans; public: vector<vector<int>> permuteUnique(vector<int>& nums) { sort(nums.begin(), nums.end()); perm(nums, 0, nums.size() - 1); return ans; } void perm(vector<int> nums, int left, int right) { if (left == right) ans.push_back(nums); else { for (int i = left; i <= right; i++) { if (i != left && nums[left] == nums[i]) continue; # 去重 swap(nums[left], nums[i]); perm(nums, left + 1, right); } } } };
這是別人的答案,我看不明白
我甚至不確定這還是不是回溯