next-permutation

實(shí)現(xiàn)“下一個(gè)排列”函數(shù),將排列中的數(shù)字重新排列成字典序中的下一個(gè)更大的排列。 如果這樣的重新排列是不可能的,它必須重新排列為可能的最低順序(即升序排序)
if(i==0) { reverse(num.begin(),num.end()); //當(dāng)不存在升序,則當(dāng)前排列是最大排列,只要旋轉(zhuǎn)整個(gè)序列變成最小排列。
從前往后找第一個(gè)升序?qū)Φ奈恢?找到升序?qū)?則存在交換大小順序.從后往前找比當(dāng)前位置打的元素,交換之

class Solution {
public:
    void nextPermutation(vector<int> &num) {
        int i=num.size()-1;
        while(i&&num[i]<=num[i-1])i--;
        if(i==0)reverse(num.begin(),num.end());
        else{
            int j=num.size()-1;
            while(num[j]<=num[i-1])j--;
            swap(num[i-1],num[j]);
            reverse(num.begin()+i,num.end());
        }
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 標(biāo)簽: C++ 算法 LeetCode 數(shù)組 每日算法——leetcode系列 問(wèn)題 Next Permuta...
    CarlBlack閱讀 795評(píng)論 0 0
  • Description: Implement next permutation, which rearranges...
    CharlieGuo閱讀 471評(píng)論 0 0
  • Implement next permutation, which rearranges numbers into...
    stevewang閱讀 558評(píng)論 0 0
  • 概念 全排列的生成算法有很多種,有遞歸遍例,也有循環(huán)移位法等等。C++/STL中定義的next_permutati...
    kylelibra閱讀 623評(píng)論 0 1
  • 下一個(gè)排列 題目描述: 實(shí)現(xiàn)獲取下一個(gè)排列的函數(shù),算法需要將給定數(shù)字序列重新排列成字典序中下一個(gè)更大的排列。 如果...
    Peter_Haoran閱讀 95評(píng)論 0 0

友情鏈接更多精彩內(nèi)容