Steward
分享是一種喜悅、更是一種幸福
程式語言 - LeetCode - C - 31. Next Permutation
參考資訊:
https://algo.monster/liteproblems/31
https://www.cnblogs.com/grandyang/p/4428207.html
題目:

解答:
void reverse(int arr[], int n)
{
int l = 0;
int r = n - 1;
while (l < r) {
arr[l] = arr[l] ^ arr[r];
arr[r] = arr[l] ^ arr[r];
arr[l] = arr[l] ^ arr[r];
l += 1;
r -= 1;
}
}
void nextPermutation(int* nums, int numsSize)
{
int p = numsSize - 2;
for (p = numsSize - 2; p >= 0; --p) {
if (nums[p + 1] > nums[p]) {
break;
}
}
if (p >= 0) {
for (int i = numsSize - 1; i > p; --i) {
if (nums[i] > nums[p]) {
nums[p] = nums[p] ^ nums[i];
nums[i] = nums[p] ^ nums[i];
nums[p] = nums[p] ^ nums[i];
break;
}
}
}
reverse(&nums[p + 1], numsSize - p - 1);
}