0
点赞
收藏
分享

微信扫一扫

力扣(LeetCode)47. 全排列 II(2022.02.16)

卿卿如梦 2022-02-17 阅读 29

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

示例 1:

示例 2:

提示:

方法一:DFS+回溯法(注意每次回溯之前要进行一次排序,保障swap之后仍然是有序数组)

C++提交内容:

class Solution {
public:
    vector<vector<int>> ans;

    void backtrack(vector<int>& nums, int start){
        if(start == nums.size()){
            ans.emplace_back(nums);
            return;
        }

        for(int i = start; i < nums.size(); ++i){
            sort(nums.begin() + start, nums.end());
            if(i > start && nums[i] == nums[i - 1]){
                continue;
            }
            swap(nums[start], nums[i]);
            backtrack(nums, start + 1);
            swap(nums[start], nums[i]);
        }
    }

    vector<vector<int>> permuteUnique(vector<int>& nums) {
        backtrack(nums, 0);
        return ans;
    }
};
举报

相关推荐

0 条评论