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
最新推荐文章于 2020-10-03 00:35:45 发布