leetcode46数组全排列

数组全排列

1. 交换某一个数组中的某一位与后面的某一位,固定该位后,让该位后面的进行全排列
2. 回溯将交换的两位换回来,将最开始的状态进行全排列
   void perm(vector<vector<int>> &res,vector<int>& nums,int begin,int end)
   {
       if(begin==end)//结束条件
       {
           res.push_back(nums);
           return;
       }
       int i;
       for(i=begin;i<end;i++)//路径选择
       {
           swap(nums[i],nums[begin]);//交换第一位与后面某一位
           perm(res,nums,begin+1,end);//第一位的后面进行全排列
           swap(nums[i],nums[begin]);//恢复原状
       }
       //或者i=begin+1   后面进行单独全排列 perm(res,nums,begin+1,end)
       
   }
   vector<vector<int>> permute(vector<int>& nums) {
       vector<vector<int>> res;
       perm(res,nums,0,nums.size());
       return res;
   }
原创文章 23 获赞 26 访问量 428

猜你喜欢

转载自blog.csdn.net/weixin_41672404/article/details/106095666
今日推荐