P47 全排列 II

Screenshot 2025-10-22 174214.png

这个题目和上一题不同的是它,有重复的数字。

解决方法也很简单,先排序判断这是第几个相同的位置

class Solution {
public:
    void dfs(int x,vector<int> &ras,vector<vector<int>> &ans,vector<int> k,vector<int> st){ 
        if(x == ras.size()){
            ans.push_back(k);
            return ;
        } 
        for(int i = 0;i < ras.size();i++){
            if(!st[i]){
                if(i && ras[i-1] == ras[i] && !st[i-1]) continue;
                k.push_back(ras[i]);
                st[i] = true;
                dfs(x + 1, ras, ans, k, st);
                k.pop_back();
                st[i] = false;
            }
        }
    }
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        vector<vector<int>> ans;
        vector<int> k;
        vector<int> st(nums.size() , false);
        sort(nums.begin(),nums.end());
        dfs(0, nums , ans , k , st);
        return ans;
    }
};

Screenshot 2025-10-22 175120.png

迷茫java练习生