本文共 1058 字,大约阅读时间需要 3 分钟。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须原地修改,只允许使用额外常数空间。
class Solution {public: void nextPermutation(vector & nums) { if(nums.size() < 2) return ; for(int i=nums.size()-1;i>0;i--){ if(nums[i] > nums[i-1]){ int min=nums[i]; int flag=i; for(int j=i+1;j < nums.size();j++){ if( nums[j] > nums[i-1] && nums[j] < min){ flag=j; min=nums[j]; } } int temp=nums[i-1];//可以直接用swap函数 nums[i-1]=nums[flag]; nums[flag]=temp; sort(nums.begin()+i,nums.end()); return ; } if(i==1 && nums[i] < nums[0]){ sort(nums.begin(),nums.end());//这里也可以用reverse(nums.begin(),nums.end())效果一样 return ; } } }};
通过时间:
转载地址:http://xiemb.baihongyu.com/