leetcode-華為專題-31. 下一個排列
阿新 • • 發佈:2021-08-16
class Solution { public: void nextPermutation(vector<int>& nums) { // 我要比你大,還大的最小 // 較小數儘量靠右, 所以從右往前找 // 較大數儘可能小 int i = nums.size()-2; // 尋找較小數 while(i>=0&&nums[i]>=nums[i+1]){ i--; } // cout<<"i: "<<i<<endl;// 如果i小於0,說明整個陣列都是降序排列,直接返回升序排列結果 if(i<0){ sort(nums.begin(), nums.end()); return; } // 因為i之後的肯定都是降序排列,所以直接從後往前找較大值 int j = nums.size()-1; while(j>=0&&nums[i]>=nums[j]){ j--; } swap(nums[i],nums[j]);// 交換較大值與較小值 sort(nums.begin()+i+1,nums.end()); // 將 i後面的元素升序排列。 return; } }; class Solution { public: void nextPermutation(vector<int>& nums) { // 最快的方法 next_permutation(nums.begin(), nums.end()); return; } };