唯一排列的总数
total number of unique permutaions
给定一个可能包含重复的数字集合,返回所有可能的唯一排列。
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;
}
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么不;名字在地图上是按顺序排列的吗
- 何时在引用或唯一指针上使用移动语义
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 计算排序向量的向量中唯一值的计数
- 按对象的特定方法按升序排列的C++优先级队列
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 通过组合不同的类型来创建唯一的id
- 使用Unique_ptr确保工厂中的对象唯一
- c++多进程编写一个唯一的文件
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 找到具有最多子串栅栏的字符串排列
- 如何更改唯一指针向量的可见性
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 唯一排列的总数
- 如何从长度为 n 的字符串中获取 lengh k 的所有唯一排列的数量
- 打印C++的唯一排列
- 计算包含某些项的列表集合的唯一排列的算法
- 实现字典排序以找到唯一的排列
- 向量上的唯一排列