Leetcode典型题解答和分析、归纳和汇总——T47(全排列II)

题目描述:

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

题目解析:

根据题目意思可知,本题采用回溯算法,但是在处理相同数据的时候,需要进行剪枝处理。

class Solution {
public:
    void backtrack(vector<vector<int>>& ans, vector<int>& nums, vector<int>& curr, vector<int>& visited){
        if(curr.size() == nums.size()){
            ans.push_back(curr);
            return;
        }
        for(int i = 0; i < nums.size(); i++){
            if(visited[i]) continue;
            if(i > 0 && nums[i] == nums[i - 1] && visited[i - 1] == 0) continue;  //剪枝处理
            curr.push_back(nums[i]);
            visited[i] = 1;
            backtrack(ans, nums, curr, visited);
            curr.pop_back();
            visited[i] = 0;
        }
        
    }
    
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        vector<vector<int>> ans;
        vector<int> curr;
        vector<int> visited(nums.size(), 0);
        backtrack(ans, nums, curr, visited);
        return ans;
        
    }
};


作者:jerry-peng
链接:https://leetcode-cn.com/problems/permutations-ii/solution/hui-su-fa-jian-dan-jian-zhi-by-jerry-peng/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
发布了56 篇原创文章 · 获赞 7 · 访问量 4473

猜你喜欢

转载自blog.csdn.net/weixin_44504987/article/details/104374797
今日推荐