LeetCode 31. 下一个排列
算法的思路参考了LeetCode官方解答:
代码实现:
class Solution {
public:
void nextPermutation(vector<int>& nums) {
if (1 == nums.size()) return;
int i, j;
// 寻找较小数nums[i]
for (i = nums.size() - 2; i >= 0; --i) {
if (nums[i + 1] > nums[i]) break;
}
if (i >= 0) {
// 寻找较大数nums[j]
for (j = nums.size() - 1; j > i; --j) {
if (nums[j] > nums[i]) break;
}
// 交换较大数和较小数
swap(nums[i], nums[j]);
}
// 将交换后较大数后面的降序序列变为升序
reverse(nums.begin() + i + 1, nums.end());
}
};