1. 程式人生 > 其它 >leetcode-華為專題-31. 下一個排列

leetcode-華為專題-31. 下一個排列

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; } };