zoukankan      html  css  js  c++  java
  • Leetcode 47. Permutations II

    47. Permutations II

    • Total Accepted: 80610
    • Total Submissions: 277081
    • Difficulty: Medium

    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,2,3],
      [1,3,2],
      [2,1,3],
      [2,3,1],
      [3,1,2],
      [3,2,1]
    ]

    思路:回溯法,和类似,但是本题的元素是可以有重复的,所以处理上有所不同。具体做法是先排序,然后0到nums.size()-1的位置上,每个位置放入当前剩下元素的每个类别。

    例如对于[1,2,1],排序后为[1,1,2],有2类数。

    第一次递归形成[1](下次递归还有2类数)和[2](下次递归只有1类数);

    第二次递归形成[1,1](下次递归还有1类数) [1,2](下次递归还有1类数)和[2,1](下次递归还有1类数);

    第三次递归形成[1,1,2] [1,2,1] [2,1,1]

    代码:

     1 class Solution {
     2 public:
     3     void permuteUnique(vector<vector<int> > &res,vector<int> nums,vector<int> v,int cur){
     4         if(!nums.size()){
     5             res.push_back(v);
     6             return;
     7         }
     8         //每个位置,每个种类的数只能放一次
     9         for(int i=0;i<nums.size();i++){
    10             int temp=nums[i];
    11             v.push_back(temp);
    12             nums.erase(nums.begin()+i);
    13             permuteUnique(res,nums,v,cur+1);
    14             nums.insert(nums.begin()+i,temp);
    15             v.pop_back();
    16             while(i+1<nums.size()&&nums[i]==nums[i+1]) i++;
    17         }
    18     }
    19     vector<vector<int> > permuteUnique(vector<int>& nums) {
    20         vector<vector<int> > res;
    21         vector<int> v;
    22         sort(nums.begin(),nums.end());
    23         permuteUnique(res,nums,v,0);
    24         return res;
    25     }
    26 };
  • 相关阅读:
    I-Cache和D-cache
    socat使用
    反射
    属性方法
    getitem
    文件打开编辑和函数参数
    python3编码问题个人理解
    正文内容 python3编码问题
    进度条制作
    集合关系
  • 原文地址:https://www.cnblogs.com/Deribs4/p/5749209.html
Copyright © 2011-2022 走看看