——Next Permutation

31、Next Permutation

下一個排列

給定一個整數數組來表示排列,找出其之後的一個排列。

 注意事項

排列中可能包含重複的整數

樣例

給出排列[1,3,2,3],其下一個排列是[1,3,3,2]

給出排列[4,3,2,1],其下一個排列是[1,2,3,4]

分析:

下一個排列,即組成下一個比他大的數字,如:
1359
1395
1539
1935
1953
……
則有這三種可能:
1.9531,直接逆序->1359
2.1359,最大的數字升序,->1395,直接和後一位交換即可。
3.1395,中間數的升序,->1539,3和5交換後,3和9還有逆序。

代碼:

class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        int N=nums.size();
        int count=-1;
        for(int i=N-2;i>=0;i--)
            if(nums[i]<nums[i+1])
            {
                count=i;
                break;
            }
        if(count==-1)
        {
            reverse(nums.begin(),nums.end());
            return;
        }
        int j;
        for(j=N-1;j>count;j--)
            if(nums[j]>nums[count])
                break;
        swap(nums[count],nums[j]);
        reverse(nums.begin()+count+1,nums.end());
        
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章