力扣-47-全排列Ⅱ
好像相对于全排列唯一的不同就是包含了重复元素,这样的话会与原题有什么区别呢?
明明每次都选择了不同的元素,但是因为有元素相同,所以最终的结果却出现了重复值
然后因为这里是在意序列顺序、定长的,所以不能像之前做组合一样,直接从后面选、或者排序再从后面选什么的
这里用排序+交换?我尝试这么写了,但是很明显就出问题了,这俩不能同时用,因为交换会破坏原本的有序序列
用交换的本意是省去对于已经选择元素的标记
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); } } } };
这是别人的答案,我看不明白
我甚至不确定这还是不是回溯
本文作者:YaosGHC
本文链接:https://www.cnblogs.com/yaocy/p/16968617.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步