общее количество уникальных перестановок - PullRequest
0 голосов
/ 01 ноября 2019

Учитывая набор чисел, которые могут содержать дубликаты, вернуть все возможные уникальные перестановки.

https://leetcode.com/problems/permutations-ii/

Я провалил очень большой тест, может ли кто-нибудь помочь мне, где я делаюнеправильно. Я делаю (i==j||nums[i]!=nums[j]), чтобы избежать дубликатов, остальное - простой возврат.

class Solution {
public:
    void solve(vector<vector<int>>&res,int j,vector<int>&nums){
        if(j==nums.size()){
            res.push_back(nums);
            return;
        }
        for(int i=j;i<nums.size();i++){
            if(i==j||nums[i]!=nums[j]){
            swap(nums[i],nums[j]);
            solve(res,j+1,nums);
            swap(nums[i],nums[j]);}
        }
    }
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        vector<vector<int>>res;
        sort(nums.begin(),nums.end());
        solve(res,0,nums);
        return res;
    }
};

1 Ответ

0 голосов
/ 01 ноября 2019

Попробуйте

#include <iostream>
using namespace std;
// Function to find all Permutations of a given string str[i..n-1]
// containing all distinct characters
void permutations(string str, int i, int n)
{
// base condition
if (i == n - 1)
{
    cout << str << endl;
    return;
}

// process each character of the remaining string
for (int j = i; j < n; j++)
{
    // swap character at index i with current character
    swap(str[i], str[j]);       // STL swap() used

    // recur for string [i+1, n-1]
    permutations(str, i + 1, n);

    // backtrack (restore the string to its original state)
    swap(str[i], str[j]);
  }
  }

// Find all Permutations of a string
int main()
{
string str = "ABC";

permutations(str, 0, str.length());

return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...