47. 全排列 II 力扣(中等) 手写练习
47. 全排列 II
给定一个可包含重复数字的序列 nums
,按任意顺序 返回所有不重复的全排列。
提示:
1 <= nums.length <= 8
-10 <= nums[i] <= 10
题源:https://leetcode-cn.com/problems/permutations-ii/
扩展:
基础版:46. 全排列
代码:
class Solution { public: vector<vector<int>> res; void dfs(int k, vector<int> nums) { if(k>=nums.size()) { res.push_back(nums); return; } bool vis[25]; memset(vis,0,sizeof(vis)); for(int i=k;i<nums.size();i++) { if(vis[nums[i]+10]) continue; vis[nums[i]+10]=1; // 因为数字范围是[-10,10,] swap(nums[k],nums[i]); dfs(k+1,nums); swap(nums[k],nums[i]); } } vector<vector<int>> permuteUnique(vector<int>& nums) { // 不能一开始就把nums放入res,会扼杀后面的变动 dfs(0,nums); return res; } };