leetcode 47.全排列 II

给定一个可包含重复数字的序列,返回所有不重复的全排列。

示例:

输入: [1,1,2]
输出:
[
  [1,1,2],
  [1,2,1],
  [2,1,1]
]

查找一下就行了吧?
 

class Solution {
    vector<vector<int> > res;
    bool *flag;
    int n;
    bool is_repeat(vector<int> t, int a){
        if(count(t.begin(), t.end(), a) != 0) 
            return false;
        else 
            return true;
    }

    void dfs(vector<int> &nums, vector<int> &t, bool *flag){
        if(count(flag, flag+n, false)==0) { // 没有false值了,到头了
            if(count(res.begin(), res.end(), t)==0)// 并不重复
                res.push_back(t);
            return; 
        }
        for(int i=0; i<n; i++){
            if(flag[i] == true) continue;
            flag[i] = true;
            t.push_back(nums[i]);
            dfs(nums, t, flag);
            flag[i] = false;
            t.pop_back();
        }
    }
public:
// 不仅要判断有没有重复数,而且还要在res里判断是否重合
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        n = nums.size();
        flag = new bool[n](); // 是否使用的地图,true代表被使用
        vector<int> t;
        dfs(nums, t, flag); 
        return res;
    }
};

会使用了count,不错。

发布了147 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/HeroIsUseless/article/details/103756256