/*这道题目是一道找规律的问题:
1.从最末尾寻找一对相邻的元素,满足num[i]<num[i+1];
2.如果找到这样的一对相邻元素,再从末尾开始找一个元素num[j],
满足num[j]>num[i];如果没有找到这样的相邻元素,转4;
3.交换num[i]和num[j],然后颠倒从i+1一直到末尾的元素;
4.表示当前序列已经是最大的,直接翻转整个序列即可。
方法参考自:https://github.com/soulmachine/leetcode*/
class Solution {
public:
void nextPermutation(vector<int> &num) {
if(num.size() < 2) return;
int i(num.size() - 2);
while(i >= 0){
if(num[i] < num[i+1]){
int j(num.size() - 1);
while(num[j] <= num[i]) --j;
swap(num[i], num[j]);
reverse(num.begin()+i+1, num.end());
return;
}
--i;
}
reverse(num.begin(), num.end());
return;
}
};
/*如果单纯为了AC这道题,直接用STL中的next_permutation()函数即可*/
class Solution {
public:
void nextPermutation(vector<int> &num) {
next_permutation(num.begin(), num.end());
}
};
LeetCode之Next Permutation
最新推荐文章于 2021-04-09 23:29:56 发布