程式語言 - 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);
}