119_leetcode_Permutations II
2014-06-30 07:41
288 查看
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,
and
1:特殊情况,数组按照升序排序;2:递归,以及递归结束情况;3:选择其中一个进入数组,并且注意这个数字能够取到的条件
vector<vector<int> > permuteUnique(vector<int> &num)
{
vector<vector<int> > result;
if(num.size() == 0 )
{
return result;
}
int size = (int)num.size();
vector<bool> flag(size, false);
sort(num.begin(), num.end());
int number = 0;
vector<int> temp;
permuteUniqueCore(num, number, result, temp, flag);
return result;
}
void permuteUniqueCore(vector<int> &num, int number, vector<vector<int> > &result, vector<int> &temp, vector<bool> &flag)
{
if(number == (int)num.size())
{
result.push_back(temp);
return;
}
for(int i = 0; i < (int)num.size(); i++)
{
if(flag[i] == true || ( i != 0 && num[i] == num[i-1] && flag[i-1] == false))
{
continue;
}
temp.push_back(num[i]);
flag[i] = true;
permuteUniqueCore(num, number+1, result, temp, flag);
flag[i] = false;
temp.pop_back();
}
}
For example,
[1,1,2]have the following unique permutations:
[1,1,2],
[1,2,1],
and
[2,1,1].
1:特殊情况,数组按照升序排序;2:递归,以及递归结束情况;3:选择其中一个进入数组,并且注意这个数字能够取到的条件
vector<vector<int> > permuteUnique(vector<int> &num)
{
vector<vector<int> > result;
if(num.size() == 0 )
{
return result;
}
int size = (int)num.size();
vector<bool> flag(size, false);
sort(num.begin(), num.end());
int number = 0;
vector<int> temp;
permuteUniqueCore(num, number, result, temp, flag);
return result;
}
void permuteUniqueCore(vector<int> &num, int number, vector<vector<int> > &result, vector<int> &temp, vector<bool> &flag)
{
if(number == (int)num.size())
{
result.push_back(temp);
return;
}
for(int i = 0; i < (int)num.size(); i++)
{
if(flag[i] == true || ( i != 0 && num[i] == num[i-1] && flag[i-1] == false))
{
continue;
}
temp.push_back(num[i]);
flag[i] = true;
permuteUniqueCore(num, number+1, result, temp, flag);
flag[i] = false;
temp.pop_back();
}
}
相关文章推荐
- leetcode - Permutations II
- LeetCode 47 Permutations II
- leetcode 47. Permutations II
- LeetCode-Array-119. Pascal's Triangle II
- LeetCode_OJ【47】Permutations II
- LeetCode - 47. Permutations II
- leetcode 119. Pascal's Triangle II 杨辉三角形2
- [Leetcode] Permutations II
- LeetCode(Permutations II)
- leetcode: Permutations II
- leetCode 47.Permutations II (排列组合II) 解题思路和方法
- LeetCode119——Pascal's Triangle II
- LeetCode 119 Pascal's Triangle II
- LeetCode|Permutations II
- Permutations II ——LeetCode
- Leetcode: Permutations II 理解分析
- Leetcode 119. Pascal's Triangle II (Easy) (cpp)
- leetcode:119 Pascal's Triangle II-每日编程第二十五题
- [Leetcode] Permutations II
- LeetCode: Permutations II 解题报告