Problem
47
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
Example
Input: [1,1,2]
Output:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
面试题08.08
Write a method to compute all permutations of a string whose charac ters are not necessarily unique. The list of permutations should not have duplicates.
Example1
Input: S = “qqe”
Output: [“eqq”,“qeq”,“qqe”]
Example2
Input: S = “ab”
Output: [“ab”, “ba”]
面试题38
输入一个字符串,打印出该字符串中字符的所有排列。
你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。
Example
输入:s = “abc”
输出:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]
Solution
在46. Permutations&&面试题 08.07. Permutation I LCCI的基础之上,输入中可能存在重复。
画出搜索树
Solution 47
class Solution {
public:
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<vector<int>> ret;
if(nums.empty())
return ret;
sort(nums.begin(),nums.end());
vector<bool> used(nums.size(),false);
vector<int> tmp;
backtrack(nums,used,tmp,ret);
return ret;
}
void backtrack(vector<int> &nums,vector<bool> &used,vector<int> &tmp,vector<vector<int>> &ret)
{
if(tmp.size() == nums.size())
{
ret.push_back(tmp);
return;
}
for(int i = 0;i<nums.size();++i)
{
if(used[i])
continue;
//注意这里的剪枝条件,特别是最后一个used[i-1] == false
if(i > 0 && nums[i] == nums[i-1] && used[i-1] == false)
continue;
tmp.push_back(nums[i]);
used[i] = true;
backtrack(nums,used,tmp,ret);
tmp.pop_back();
used[i] = false;
}
}
};
Solution 面试题08.08 && 面试题38
class Solution {
public:
vector<string> permutation(string S) {
vector<string> ret;
if(S.empty())
return ret;
string tmpS = "";
vector<bool> used(S.length(),false);
sort(S.begin(),S.end());
backtrack(S,used,tmpS,ret);
return ret;
}
void backtrack(string &S,vector<bool> &used,string &tmpS,vector<string> &ret)
{
if(tmpS.length() == S.length())
{
ret.push_back(tmpS);
}
for(int i = 0;i<S.length();++i)
{
if(used[i])
continue;
if(i > 0 && S[i] == S[i-1] && used[i-1] == false)
continue;
tmpS += S[i];
used[i] = true;
backtrack(S,used,tmpS,ret);
tmpS = tmpS.substr(0,tmpS.length() - 1);
used[i] = false;
}
}
};
Ref
https://leetcode-cn.com/problems/permutations-ii/solution/hui-su-suan-fa-python-dai-ma-java-dai-ma-by-liwe-2/