php租车网站源码,渠道网络,成都建设银行保安招聘网站,做网站都需要做什么这道题让我们求这个集合有多少种排列方式#xff0c;那么与之前组合问题的不同就在于要考虑元素之间的顺序了#xff0c;所以每一层递归的or循环的起始值无需变量控制#xff0c;都从0开始。但是一个排列中不能出现相同元素#xff0c;所以别忘了去重#xff0c;这里的去重…这道题让我们求这个集合有多少种排列方式那么与之前组合问题的不同就在于要考虑元素之间的顺序了所以每一层递归的or循环的起始值无需变量控制都从0开始。但是一个排列中不能出现相同元素所以别忘了去重这里的去重方法也是之前讲过的。设置一个数组下标对应集合中元素的下标数组值为0表示在当前排列中未使用过1则表示使用过。另外题目说了集合中的元素互不相同所以这里的去重仅仅指的是一个排列中不出现相同元素而不需要在同一层递归中去重。大家可以结合我下面的代码及详细注释理解此题。
代码及详细注释如下
class Solution {
public:vectorint path;vectorvectorint result;void backtraking(vectorint nums,vectorint used){//终止条件if(path.size() nums.size()){result.push_back(path);return;}for(int i 0;i nums.size();i){//去重保证排列中元素互不相同if(used[i] 1) continue;path.push_back(nums[i]);used[i] 1;backtraking(nums,used);//递归//回溯path.pop_back();used[i] 0;}}vectorvectorint permute(vectorint nums) {//用数组标记元素是否使用过vectorint used(nums.size(),0);backtraking(nums,used);return result;}
};