1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| package eternal.fire.java;
import java.util.*;
public class LeetCode { public static void main(String[] args) { Solution solution = new Solution(); int[] nums = new int[]{1, 2, 3}; solution.nextPermutation(nums); System.out.println(Arrays.toString(nums)); } }
class Solution { public void nextPermutation(int[] nums) { for (int i = nums.length - 2; i >= 0; i--) { int position = theOne(nums, i); if (position != -1) { swap(nums, i, position); Arrays.sort(nums, i + 1, nums.length); break; } if (i == 0) { reverse(nums); } } }
public void swap(int[] nums, int i, int j) { int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; }
public int theOne(int[] nums, int index) { int val = -1; int position = -1; for (int i = index + 1; i < nums.length; i++) { if (nums[index] < nums[i]) { val = nums[i]; position = i; break; } } if (position == -1) { return -1; } for (int i = position; i < nums.length; i++) { if (nums[i] > nums[index]) { if (nums[i] < val) { position = i; val = nums[i]; } } } return position; }
public void reverse(int[] nums) { int i = 0, j = nums.length - 1; while (i < j) { swap(nums, i, j); i++; j--; } } }
|