47. Permutations II

题目

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]
]

分析

这题与上一题的不同之处为可能含有相同的元素。那么对于结果的每一位,只要跳过之前出现过的数字即可。需要注意的是,这一位的跳过不能影响下一位的使用。对于第46题稍作修改即可。

实现

class Solution {
public:
    vector> permuteUnique(vector& nums) {
        vector used(nums.size(), false);
        vector path;
        vector> ans;
        solve(nums, used, path, ans);
        return ans;
    }
private:
    void solve(vector &nums, vector &used,
                              vector &path, vector> &ans){
        if(path.size()==nums.size()){
            ans.push_back(path);
            return;
        }
        for(int i=0; i

思考

偷懒的做法也可以直接使用std::permutation()==
但是这对于提高毫无作用,面试的时候考官也肯定会让你重新实现的。
另外看题解的时候发现了c++中也有for_each()感觉很神奇,赶紧恶补了下。
然而有些还是看不懂...c++果然可怕=
=

你可能感兴趣的:(47. Permutations II)