LeetCode-- Permutations II

来源:互联网 发布:java实现单例模式 编辑:程序博客网 时间:2024/06/08 15:55

Given a collection of numbers that might contain duplicates, return all possible unique permutations.

For example,
[1,1,2] have the following unique permutations:
[
[1,1,2],
[1,2,1],
[2,1,1]
]

思路:深度优先搜索。和上一题差不多,不同在于数组中包含重复的数字,返回结果还是要不同的。注意先排序,然后就是跳过同一层但是数字相同的重复情况,最后就是不能使用引用和回溯,因为这样会重复计算一些情况。

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