本文主要是介绍leetcode 46:全排列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本题属于全排列的题,类似与leetcode 17,使用递归即可,使用一个数组用来表示nums的元素是否已使用,0表示没使用 1表示已使用
void perM(std::vector<std::vector<int>> &a,std::vector<int> &b,std::vector<int>&nums,std::vector<int>&v,int number,int len){if(len+1==number){a.push_back(v);return;}else {for(int i=0;i<=len;i++) {if (b[i] == 0) {v.push_back(nums[i]);number++;b[i]=1;perM(a,b,nums,v,number,len);b[i]=0;number--;v.pop_back();}}}}std::vector<std::vector<int>> permute(std::vector<int>& nums) {std::vector<std::vector<int>> a;int len=nums.size();std::vector<int> ch;for(int i=0;i<nums.size();i++){ch.push_back(0);}std::vector<int> v;if(len==0)return a;elseperM(a,ch,nums,v,0,len-1);return a;
}
这篇关于leetcode 46:全排列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!