LeetCode 47 Permutations II (C++, Python)

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


Solution C++


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
    void gp(vector<int>& num, vector<bool>& visited, vector<int>& mystack, vector<vector<int>>& ret) {
        if (mystack.size() == num.size()) {
            ret.push_back(mystack);
            return;
        }
        for (int i = 0; i < num.size(); ++i) {
            if (visited[i]) continue;
            if ((i > 0) && (num[i] == num[i - 1]) && (!visited[i - 1])) continue;
            visited[i] = true;
            mystack.push_back(num[i]);
            gp(num, visited, mystack, ret);
            mystack.pop_back();
            visited[i] = false;
        }
    }
public:
    vector<vector<int> > permuteUnique(vector<int> &num) {
        vector<vector<int>> ret;
        if (num.size() == 0) return ret;
        sort(num.begin(), num.end());
        vector<bool> visited(num.size(), false);
        vector<int> mystack;
        gp(num, visited, mystack, ret);
        return ret;
    }
};

Solution Python


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution:
    def gp(self, num, visited, mystack, ret):
        if len(mystack) == len(num):
            ret.append(mystack[:])
            return
        for i in range(len(num)):
            if visited[i]: continue
            if (i > 0) and (num[i] == num[i - 1]) and (not visited[i - 1]): continue
            visited[i] = True
            mystack.append(num[i])
            self.gp(num, visited, mystack, ret)
            mystack.pop()
            visited[i] = False
    # @param num, a list of integer
    # @return a list of lists of integers
    def permuteUnique(self, num):
        ret = []
        if not num: return ret
        num.sort()
        visited = [False] * len(num)
        mystack = []
        self.gp(num, visited, mystack, ret)
        return ret
        

Popular posts from this blog

How Django Works (4) URL Resolution

Python Class Method and Class Only Method

How Django works (3): Testing Server and Static Files Serving