C++提供了next_permutation可以生成全排列,但会超时,《组合数学》提到过生产下一个排列的方法
class Solution { public: void nextPermutation(vector<int>& nums) { int step; for(int i=nums.size()-2;i>=0;i--)//找到不是逆序的数 { if(nums[i]<nums[i+1]) { step=i;// break; } step=-1;//已是逆序 } if(step==-1) { sort(nums.begin(),nums.end()); } else { for(int i=nums.size()-1;i>=step;i--)//从后找,从小到大,第一个大于nums[step]的数与他交换 { if(nums[i]>nums[step]) { swap(nums[i],nums[step]); sort(nums.begin()+step+1,nums.end()); break; } } } } };