题目

下一个排列 - 图1

解题思路

力扣解题思路

下一个排列 - 图2

代码

  1. public void nextPermutation(int[] nums) {
  2. int i = nums.length - 2;
  3. while (i >= 0 && nums[i] >= nums[i + 1]) {
  4. i--;
  5. }
  6. if (i >= 0) {
  7. int j = nums.length - 1;
  8. while (j >= 0 && nums[i] >= nums[j]) {
  9. j--;
  10. }
  11. swap(nums, i, j);
  12. }
  13. reverse(nums, i + 1);
  14. }
  15. public void swap(int[] nums, int i, int j) {
  16. int temp = nums[i];
  17. nums[i] = nums[j];
  18. nums[j] = temp;
  19. }
  20. public void reverse(int[] nums, int start) {
  21. int left = start, right = nums.length - 1;
  22. while (left < right) {
  23. swap(nums, left, right);
  24. left++;
  25. right--;
  26. }
  27. }