程式語言 - LeetCode - C++ - 47. Permutations II



題目:


解答:

class Solution {
public:
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        vector<int> path;
        vector<vector<int>> r;
        vector<bool> used(nums.size(), false);
 
        auto dfs = [&](this auto&& dfs) -> void {
            if (path.size() == nums.size()) {
                r.push_back(path);
                return;
            }
 
            for (int i = 0; i < nums.size(); ++i) {
                if (used[i] == true) {
                    continue;
                }

                if ((i > 0) && (nums[i] == nums[i - 1]) && !used[i - 1]) {
                    continue;
                }
 
                used[i] = true;
                path.push_back(nums[i]);
 
                dfs();
                 
                path.pop_back();
                used[i] = false;
            }
        };
 
        sort(nums.begin(), nums.end());
        dfs();
        return r;
    }
};