47. 全排列ii

作者: geaus | 来源:发表于2020-02-12 20:58 被阅读0次

1. 题目描述

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

示例:
输入: [1,1,2]
输出:
[
  [1,1,2],
  [1,2,1],
  [2,1,1]
]

2. 解题思路

计算一个map,统计各个元素的出现次数。使用DFS遍历时,每添加一个元素当前元素count-1,然后递归遍历该map;当元素count==0时说明该元素已遍历完。

void helper(map<int, int>& nums_count, int length, vector<int>& cur, vector<vector<int>>& ret){
      if(cur.size()==length){
          ret.push_back(cur);
          return;
     }
     for(auto iter=map.begin(); iter!=map.end(); iter++){
          if(iter->second==0)
              continue;
          iter->second--;
          cur.push_back(iter->first);
          helper(nums_count, length, cur, ret);
          iter->second++;
          cur.pop_back();
     }
}
vector<vector<int>> permuteUnique(vector<int>& nums){
     vector<vector<int>> ret;
     if(nums.size()==0)
           return ret;

    map<int, int> nums_count;
    for(auto val : nums){
         nums_count[val]++;
    }

    vector<int> cur;
    helper(nums_count, nums.size(), cur, ret);
    return ret;
}

相关文章

  • 47. 全排列 II

    47. 全排列 II[https://leetcode.cn/problems/permutations-ii/]...

  • 47. 全排列 II、39. 组合总和、40. 组合总和 II

    回溯的题 47. 全排列 II[https://leetcode-cn.com/problems/permutat...

  • YC-常考的题目

    46. 全排列 47. 全排列 II 有条件的全排列,打印出[1,2,2,3,4,5]的所有4不在头并且3和5不挨...

  • 搜索(二)回溯

    一、题目总结 基础问题 46.全排列 77.组合 78.子集 39.组合求和 47.全排列 II(重复元素) 90...

  • 47.全排列II

    题目给定一个可包含重复数字的序列,返回所有不重复的全排列。 示例:****输入: [1,1,2]输出:[[1,1,...

  • 47. 全排列 II

    给定一个可包含重复数字的序列,返回所有不重复的全排列。 示例: 思路 python3解法 来源:力扣(LeetCo...

  • 47. 全排列ii

    1. 题目描述 给定一个可包含重复数字的序列,返回所有不重复的全排列。 2. 解题思路 计算一个map,统计各个元...

  • 47.全排列II

    自己解法 这题解法和全排列类似,只用对同层相同的分支进行剪枝,有点忘了在哪剪了,还是放在后面剪比较好理解,回溯完以...

  • 47. 全排列 II

    思路 排序,人为规定顺序去重。 深搜+回溯

  • 47. 全排列 II

    解法

网友评论

    本文标题:47. 全排列ii

    本文链接:https://www.haomeiwen.com/subject/chxhfhtx.html