Ejemplo n.º 1
0
    void permute_recursive(vector<int> nums, int k, vector<vector<int>>& res){
		if (k==nums.size()-1){
			res.push_back(nums);
			return;
		}
		
	    permute_recursive(nums, k + 1, res);
		for(int i = k + 1; i < nums.size(); i++){
			if (nums[k] == nums[i]){continue;}
			swap(nums[k], nums[i]);
			permute_recursive(nums, k + 1, res);
		}
	}
Ejemplo n.º 2
0
 void permute_recursive(std::string permutation_wip, std::string text, std::vector<int> & permutations,std::function<bool(int)> include_fnc) {
     if (0 == text.length()) {
         int perm = stoi(permutation_wip);
         if(include_fnc(perm)) {
             
             bool found = false;
             
             for (auto e : permutations)
             {
                 if (e == perm) {
                     found = true;
                 }
             }
             if(!found) {
                 permutations.push_back(perm);
             }
         }
         
     }
     else {
         for(int i = 0; i < text.length(); i++)
         {
             std::string textcopy = text;
             std::string permutation_wip_copy = permutation_wip;
             permutation_wip_copy += textcopy[i];
             textcopy.erase(i,1);
             permute_recursive(permutation_wip_copy, textcopy, permutations,include_fnc);
         }
     }
 }
Ejemplo n.º 3
0
 vector<int> permute(int number,std::function<bool(int)> include_fnc) {
     std::vector<int> perms;
     int tmp = number;
     int num_perms = 1;
     while (tmp) {
         num_perms *= tmp;
         tmp--;
     }
     
     perms.reserve(num_perms);
     
     permute_recursive("", to_string(number), perms, include_fnc);
     
     return perms;
 }
Ejemplo n.º 4
0
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        vector<vector<int>> res;
		sort(nums.begin(), nums.end());
		permute_recursive(nums, 0, res);
		return res;
    }