实现“下一个排列”函数,将排列中的数字重新排列成字典序中的下一个更大的排列。 如果这样的重新排列是不可能的,它必须重新排列为可能的最低顺序(即升序排序)
if(i==0) { reverse(num.begin(),num.end()); //当不存在升序,则当前排列是最大排列,只要旋转整个序列变成最小排列。
从前往后找第一个升序对的位置,找到升序对,则存在交换大小顺序.从后往前找比当前位置打的元素,交换之
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());
}
}
};
网友评论