實(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());
}
}
};