【leetcode】Next Permutation

class Solution {
public:
    void nextPermutation(vector<int> &num) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        for(int i=num.size()-2;i>=0;i--)// 從後往前 找到第一對遞增的pair,比如a[i]<a[i+1],那麼i就叫做替換點
        {
            if(num[i]<num[i+1])
            {
                for(int j=i+1;j<num.size();j++)
                //接着要從i之後的序列中 從後往前 找出第一個大於a[i]的數,
                //比如是a[i+k],那麼將a[i]與a[i+k]交換,然後將a[i+1,...,len-1]這段序列做reverse即可
                {
                    if(j==num.size()-1||num[j+1]<=num[i])
                    {
                        swap(num[i],num[j]);
                        reverse(num.begin()+i+1,num.end());
                        return;
                    }
                }
            }
        }
        reverse(num.begin(),num.end());
    }
};

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