47. Permutations II

来源:互联网 发布:汉语大卫知乎 编辑:程序博客网 时间:2024/05/23 11:39

1、题目描述

给一个数组,可能包含重复元素,返回它的unique的全排列。


2、思路

把数组排序。回溯,

如果当前元素和上一个元素相同,那么跳过这个元素。

基本法还是和I问题相同,用INT_MAX标记访问过的数字。


3、代码

    vector<vector<int>> permuteUnique(vector<int>& nums) {        sort(nums.begin(),nums.end());        vector<vector<int>> ans;        vector<int>v;        dfs(ans,nums,v);        return ans;    }    void dfs(vector<vector<int>>& ans,vector<int>& nums,vector<int>& v){        if(v.size()==nums.size()){            ans.push_back(v);            return;        }        for(int i=0;i<nums.size();i++){            if(nums[i]==INT_MAX) continue;            else if(i>0 && nums[i]==nums[i-1]) continue;            v.push_back(nums[i]);            int a = nums[i];            nums[i]=INT_MAX;            dfs(ans,nums,v);            v.pop_back();            nums[i]=a;          }    }


原创粉丝点击