【leetcode 回溯dfs C++】47. Permutations II

47. Permutations II

在这里插入图片描述

class Solution {
    
    
public:
    vector<vector<int>> ans;
    void dfs(vector<int> nums, int start) {
    
    
        if(start == nums.size() - 1) ans.push_back(nums);
        for(int ii = start; ii < nums.size(); ii++) {
    
    
            if(ii != start && nums[ii] == nums[start]) continue;
            swap(nums[ii], nums[start]);
            dfs(nums, start + 1);
        }
    }
    vector<vector<int>> permuteUnique(vector<int>& nums) {
    
    
        sort(nums.begin(), nums.end());
        dfs(nums, 0);
        return ans;
    }
};

在这里插入图片描述

class Solution {
    
    
public:
    set<vector<int>> ans;
    void dfs(vector<int>& nums, vector<bool>& visited, vector<int>& V) {
    
    
        int flag = true;
        for(int ii = 0; ii < nums.size(); ii++) {
    
    
            if(!visited[ii]) {
    
    
                flag = false;
                visited[ii] = true;
                V.push_back(nums[ii]);
                dfs(nums, visited, V);
                visited[ii] = false;
                V.pop_back();
            }
        }
        if(flag) ans.insert(V);
    }
    vector<vector<int>> permuteUnique(vector<int>& nums) {
    
    
        vector<bool> visited(nums.size(), false);
        vector<int> V;
        dfs(nums, visited, V);
        vector<vector<int>> ans_V(ans.begin(), ans.end());
        return ans_V;
    }
};

猜你喜欢

转载自blog.csdn.net/m0_37454852/article/details/114310630