LeetCode 047 Permutations II

来源:互联网 发布:淘宝店铺的权重 编辑:程序博客网 时间:2024/04/30 14:26

题目要求和上一题类似,不过给出的整数可能有重复,输出不能含有相同的排列。

参考第31题,Next Permutation。需要注意的是把循环里的一些大于号改成大于等于,这样就不会产生重复的排列。

代码:

    bool getNext(vector<int>& order) {        int j, k;        k = order.size() - 1;        while(k > 0 && order[k - 1] >= order[k]) k--; //注意大于等于        if(k == 0) {            j = 0;            k = order.size() - 1;            while(j < k) {                swap(order[j], order[k]);                j++;                k--;            }            return true;        }        j = k - 1;        k = order.size() - 1;        while(j < k && order[j] >= order[k]) k--; //注意大于等于        swap(order[j], order[k]);        j++;        k = order.size() - 1;        while(j < k) {            swap(order[j], order[k]);            j++;            k--;        }        return true;    }    vector<vector<int>> permuteUnique(vector<int>& nums) {        vector<vector<int>> result;        vector<int> origin(nums);        do{            result.push_back(nums);            getNext(nums);        }while(nums != origin);        return result;    }
0 0