• leetcode: Permutations II


    http://oj.leetcode.com/problems/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], and [2,1,1].

    思路

    如果前面Permutations的问题已经解决了的话,这个问题就变得非常简单。先排个序,以[1, 1, 2]为例,第一个1处理过以后,第二个1就可以跳掉了。

     1 class Solution {
     2 public:
     3     void internalpermuteUnique(vector<int> &num, int index, vector<int> &perm, vector<vector<int> > &result) {
     4         int size = num.size();
     5         
     6         if (size == index) {
     7             result.push_back(perm);
     8         }
     9         else {
    10             for (int i = index; i < size; ++i) {
    11                 if ((i > index) && (num[i] == num[index])) {
    12                   continue;
    13                 }
    14                 else {
    15                   swap(num[index], num[i]);
    16                 }
    17                 
    18                 perm.push_back(num[index]);
    19                 internalpermuteUnique(num, index + 1, perm, result);
    20                 perm.pop_back();
    21             }
    22             
    23             sort(num.begin() + index, num.end());
    24         }
    25     }
    26     
    27     vector<vector<int> > permuteUnique(vector<int> &num) {
    28         vector<vector<int> > result;
    29         vector<int> perm;
    30         
    31         sort(num.begin(), num.end());
    32         internalpermuteUnique(num, 0, perm, result);
    33         
    34         return result;
    35     }
    36 };
  • 相关阅读:
    希尔排序
    快速排序
    归并排序
    插入排序
    简单选择排序
    冒泡排序
    算法之时间复杂度和空间复杂度
    数据结构与算法思维导图
    rootfs根文件系统
    kernel 2.6.35.7向S5PV210移植
  • 原文地址:https://www.cnblogs.com/panda_lin/p/permutations_ii.html
Copyright © 2020-2023  润新知