1. class Solution {
    2. public:
    3. void nextPermutation(vector<int>& nums) {
    4. int i = nums.size() - 2;
    5. while (i >= 0 && nums[i] >= nums[i + 1]) {
    6. i--;
    7. }
    8. if (i >= 0) {
    9. int j = nums.size() - 1;
    10. while (j >= 0 && nums[i] >= nums[j]) {
    11. j--;
    12. }
    13. swap(nums[i], nums[j]);
    14. }
    15. reverse(nums.begin() + i + 1, nums.end());
    16. }
    17. };
    18. 作者:LeetCode-Solution
    19. 链接:https://leetcode-cn.com/problems/next-permutation/solution/xia-yi-ge-pai-lie-by-leetcode-solution/
    20. 来源:力扣(LeetCode
    21. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    1. class Solution {
    2. public void nextPermutation(int[] nums) {
    3. if (nums == null || nums.length == 0) return;
    4. int firstIndex = -1;
    5. for (int i = nums.length - 2; i >= 0; i--) {
    6. if (nums[i] < nums[i + 1]) {
    7. firstIndex = i;
    8. break;
    9. }
    10. }
    11. if (firstIndex == -1) {
    12. reverse(nums, 0, nums.length - 1);
    13. return;
    14. }
    15. int secondIndex = -1;
    16. for (int i = nums.length - 1; i >= 0; i--) {
    17. if (nums[i] > nums[firstIndex]) {
    18. secondIndex = i;
    19. break;
    20. }
    21. }
    22. swap(nums, firstIndex, secondIndex);
    23. reverse(nums, firstIndex + 1, nums.length - 1);
    24. return;
    25. }
    26. private void reverse(int[] nums, int i, int j) {
    27. while (i < j) {
    28. swap(nums, i++, j--);
    29. }
    30. }
    31. private void swap(int[] nums, int i, int i1) {
    32. int tmp = nums[i];
    33. nums[i] = nums[i1];
    34. nums[i1] = tmp;
    35. }
    36. }
    37. 作者:powcai
    38. 链接:https://leetcode-cn.com/problems/next-permutation/solution/xia-yi-ge-pai-lie-by-powcai/
    39. 来源:力扣(LeetCode
    40. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。