您的位置:首页 > 职场人生

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,
[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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息