/*本算法思想是利用递归的方式实现数组的全排列,基本思想就是分别将数组中的每一个数字分别放在首位置,
然后后面的数字进行递归的全排,直到首尾相遇,第一次全排结束,然后还原上一步,再全排*/
class Solution {
public:
void Recursivepermute(vector<int>& nums, int start, int end, vector<vector<int>>&result)
{
if (start == end)//首尾相遇时,证明一次全排结束,存入在结果数组;
{
result.push_back(nums);
return;
}
else
{
for (int i = start; i <= end; i++)//从第一个数字开始,一次将每个数字放在首位置上;
{
swap(nums[i],nums[start]);
Recursivepermute(nums, start + 1, end, result);
swap(nums[i], nums[start]);//还原上一步完成全排之前的数组;以便进行下一次全排
}
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>>result;
Recursivepermute(nums, 0, nums.size() - 1, result);
return result;
}
};
46. Permutations
最新推荐文章于 2024-01-18 13:45:03 发布
