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());
}
};
【leetcode】Next Permutation
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.