46全排列
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
来源:力扣(LeetCode)
链接:题目链接
c++,递归方法
题解:利用递归列举所有的元素,刚开始设一个bool型的数组sign并利用函数memset将memset中的所有元素初值设置为false,通过for循环不断列举所有元素找到未使用的原元素并将其添加到动态数组中,如果动态数组的长度等于题目给定的要排列的序列的长度,则直接将动态数组添加到结果动态数组中,否则继续递归。
class Solution {
public:
vector<int> as;
vector<vector<int> > ans;
vector<vector<int>> permute(vector<int>& nums) {
int len=nums.size();
bool sign[len];
memset(sign,false,len);
generateP(nums,sign,as);
return ans;
}
void generateP(vector<int>& nums,bool sign[],vector<int> as){
for(int i = 0;i < nums.size();i ++){
if(sign[i]){
continue;
}
sign[i] = true;//标记为已使用
as.push_back(nums[i]);//放入序列
if(as.size() == nums.size()){//出现解
ans.push_back(as);
}else{//序列长度不够,继续处理
generateP(nums,sign,as);
}
as.pop_back();//从序列中删除
sign[i] = false;//重新标记为未使用
}
}
};