请问大牛们leetcode上的Permutations II# JobHunting - 待字闺中
a*e
1 楼
Given a collection of numbers that might contain duplicates, return all
possible unique permutations.
For example,
[1,1,2] have the following unique permutations:
[1,1,2], [1,2,1], and [2,1,1].
不清楚为什么这个答案会引起Output Limit Exceeded
而把if (i>k&&num[i]==num[k])
改成一个
bool noswap(int k, int i, const vector num){
for (int j=k;jif (num[j]==num[i]){
return true;
}
}
return false;
}
就被accept了。请问如何能提高解决这一类问题的能力呢?感觉工作中很少,几乎用不
到这些东西啊。。。。。以前也没系统学过cs的课。多谢多谢!
vector > permuteUnique(vector &num) {
vector > ret;
int n = num.size();
perm(num,0,n-1,ret);
return ret;
}
void perm(vector num, int k, int n, vector> &ret)
{
if (k==n)
{
ret.push_back(num);
}
else
{
for (int i=k;i<=n;i++)
{
if (i>k&&num[i]==num[k])
continue;
else
{
int t = num[i];
num[i] = num[k];
num[k] = t;
perm(num, k+1, n, ret);
}
}
}
}
possible unique permutations.
For example,
[1,1,2] have the following unique permutations:
[1,1,2], [1,2,1], and [2,1,1].
不清楚为什么这个答案会引起Output Limit Exceeded
而把if (i>k&&num[i]==num[k])
改成一个
bool noswap(int k, int i, const vector
for (int j=k;jif (num[j]==num[i]){
return true;
}
}
return false;
}
就被accept了。请问如何能提高解决这一类问题的能力呢?感觉工作中很少,几乎用不
到这些东西啊。。。。。以前也没系统学过cs的课。多谢多谢!
vector
vector
int n = num.size();
perm(num,0,n-1,ret);
return ret;
}
void perm(vector
{
if (k==n)
{
ret.push_back(num);
}
else
{
for (int i=k;i<=n;i++)
{
if (i>k&&num[i]==num[k])
continue;
else
{
int t = num[i];
num[i] = num[k];
num[k] = t;
perm(num, k+1, n, ret);
}
}
}
}