唯一排列的总数

total number of unique permutaions

本文关键字:排列 唯一      更新时间:2023-10-16

给定一个可能包含重复的数字集合,返回所有可能的唯一排列。

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;
}
};

试试这个

#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;
}