您的位置:首页 > 其它

Permutations

2015-06-14 09:36 323 查看
Description:

Given a collection of numbers, return all possible permutations.

For example,
[1,2,3]
have the following permutations:
[1,2,3]
,
[1,3,2]
,
[2,1,3]
,
[2,3,1]
,
[3,1,2]
, and
[3,2,1]
.

思路分析:

求一组数据a1,a2,..., an的全排列可按如下步骤求解:

1.求出a2,a3,...an的全排列{P1,P2, ... ,Pj};

2. 将a1插入进去,得到新的全排列{a1P1, a1P2,..., a1Pj};

3. 交换a1和ai(1<i<=n),重复执行上述1,2两步,再交换a1和ai,即可得到所有的排列组合。

Code:

//定义一个接口函数
vector<vector<int>> permute(vector<int>& nums) {
return permute(nums, 0, nums.size()-1);
}


vector<vector<int>> permute(vector<int>& nums,int lIndex, int rIndex)
{
if (lIndex <= rIndex)
{
vector< vector<int> >result, tempResult;
vector<int>temp;

if (lIndex == rIndex)
{
temp.push_back(nums[lIndex]);
result.push_back(temp);
return result;
}
else
{
for (int i = lIndex; i <= rIndex; ++i)
{
if (i != lIndex)
{//注意当i和lIndex相等时,一个数将和它本身异或,则结果一定为0
nums[i]^=nums[lIndex];
nums[lIndex]^=nums[i];
nums[i]^=nums[lIndex];
}
tempResult = permute(nums, lIndex+1, rIndex);

for (int j = 0; j < tempResult.size(); ++j)
{
tempResult[j].insert(tempResult[j].begin(),nums[lIndex]);
result.push_back(tempResult[j]);
}
//将两个元素交换回来
if (i != lIndex)
{
nums[i]^=nums[lIndex];
nums[lIndex]^=nums[i];
nums[i]^=nums[lIndex];
}
}
return result;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: