vector<vector<int>> permuteUnique(vector<int>& nums)
 {
     sort(nums.begin(), nums.end());
     vector<vector<int>> ret;
     permuteUnique(nums, 0, ret);
     return ret;
 }
Example #2
0
	void test() {
		vector<int> num = { 1, 1, 2, 2, 2 };
		vector<vector<int>> result = permuteUnique(num);
		for (auto v : result) {
			for (int x : v) {
				cout << x << ' ';
			}
			cout << endl;
		}
	}
Example #3
0
 vector<vector<int> > permuteUnique(vector<int> &num) {
     int n = num.size();
     vector<vector<int> > ans;
     if(n == 0) return ans;
     vector<bool> visited(n);
     vector<int> cur;
     sort(num.begin(), num.end());
     permuteUnique(num, visited, cur, ans);
     return ans;
 }
Example #4
0
vector<vector<int> > permuteUnique(vector<int> &num) {
    vector<vector<int>> v;
    vector<int> r;
    map<int, int> map;
    for (int i : num)
    {
        if (map.find(i) == map.end()) map[i] = 0;
        map[i]++;
    }
    permuteUnique(v, r, map, num.size());
    return v;
}
	void test()
	{
		int A[] = {1, 1, 2};
		vector<int> num(A, A + 3);
		vector<vector<int> > res = permuteUnique(num);
		for(int i = 0; i < (int)res.size(); i++)
		{
			for(int j = 0; j < (int)res[i].size(); j++)
			{
				cout << res[i][j] << " ";
			}
			cout << endl;
		}
	}
int main() {
    int nums[] = { -1, 2, -1, 2, 1, -1, 2, 1 };
    int returnSize;
    int **ans = permuteUnique(nums, sizeof(nums) / sizeof(int), &returnSize);
    int i, j;
    for (i = 0; i < returnSize; ++i) {
        for (j = 0; j < sizeof(nums) / sizeof(int); ++j) {
            printf("%d ", ans[i][j]);
        }
        printf("\n");
    }
    system("pause");
    return 0;
}
 //pass by value
 void permuteUnique(vector<int> nums, int beg, vector<vector<int>> &ret)
 {
     if (beg == nums.size())
     {
         ret.push_back(nums);
         return;
     }
     
     for (int i = beg; i < nums.size(); ++i)
     {
         if (i != beg && nums[i] == nums[beg]) continue;
         swap(nums[i], nums[beg]);
         permuteUnique(nums, beg + 1, ret);
     }
 }
void SubSetTest::testPermutateUnique( void )
{
	vector<int> testVec;
	int myarray[] = { 1, 2, 2 };
	testVec.insert (testVec.begin(), myarray, myarray+3);

	vector<vector<int>> rst = permuteUnique( testVec );
	for (int i = 0; i < rst.size(); ++i)
	{
		for (int j = 0; j < rst[i].size(); ++j)
		{
			cout<<rst[i][j]<<" ";
		}
		cout<<endl;
	}
}
Example #9
0
 void permuteUnique(vector<int> &num, vector<bool> &visited, vector<int> &cur, vector<vector<int> > &ans){
     int n = num.size();
     if(cur.size() == n)
     {
         ans.push_back(cur);
         return;
     }
     for(int i=0; i<n; i++)
     {
         if(visited[i] || i!=0 && num[i]==num[i-1] && visited[i-1]) continue;
         cur.push_back(num[i]);
         visited[i] = true;
         permuteUnique(num, visited, cur, ans);
         cur.pop_back();
         visited[i] = false;
     }
 }
Example #10
0
void permuteUnique(vector<vector<int>> &v, vector<int> &r, map<int, int> &map, int n)
{
    if (n <= 0)
    {
        v.push_back(r);
        return;
    }
    for (auto &p : map)
    {
        if (p.second <= 0) continue;
        p.second--;
        r.push_back(p.first);
        permuteUnique(v, r, map, n - 1);
        r.pop_back();
        p.second++;
    }
}
Example #11
0
    vector<vector<int> > permuteUnique(vector<int> &num) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        vector<vector<int> > result;
        int n = num.size();

        vector<vector<int> > tryed;

        if (n==1)
        {
            vector<int > one;
            one.push_back(num[0]);
            result.push_back(one);
            return result;
        }

        for (int i=0; i<n; i++)
        {
            int one = num[i];

            vector<int> tmp_num ;
            vector<int> one_try;
            one_try.push_back(one);
            for (int j=0; j<n; j++)
            {
                if (j != i)
                {
                    tmp_num.push_back(num[j]);
                    one_try.push_back(num[j]);
                }
            }

            vector<vector<int> >::iterator it;
            it = find(tryed.begin(), tryed.end(), one_try);
            if (it != tryed.end() )
            {
                continue;
            }
            else
            {
                tryed.push_back(one_try);
            }


            vector<vector<int> > tmp_result = permuteUnique(tmp_num);

            for (int j=0; j<tmp_result.size(); j++)
            {
                tmp_result[j].insert(tmp_result[j].begin(), one);

                vector<vector<int> >::iterator it;

                it = find(result.begin(), result.end(), tmp_result[j]);

                if (it == result.end())
                    result.push_back(tmp_result[j]);
            }
        }


        return result;


    }