题目
31. 下一个排列
题解
代码
public class code31 {
public static void nextPermutation(int[] nums) {
if (nums == null || nums.length == 0) {
return;
}
int firstIndex = -1;
for (int i = nums.length - 2; i >= 0; i--) {
if (nums[i] < nums[i + 1]) {
firstIndex = i;
break;
}
}
if (firstIndex == -1) {
reverse(nums, 0, nums.length - 1);
return;
}
int secondIndex = -1;
for (int i = nums.length - 1; i >= 0; i--) {
if (nums[i] > nums[firstIndex]) {
secondIndex = i;
break;
}
}
swap(nums, firstIndex, secondIndex);
reverse(nums, firstIndex + 1, nums.length - 1);
return;
}
public static void reverse(int nums[], int i, int j) {
while (i < j) {
swap(nums, i++, j--);
}
}
public static void swap(int nums[], int a, int b) {
int temp = nums[a];
nums[a] = nums[b];
nums[b] = temp;
}
public static void main(String[] args) {
int nums[] = { 1, 2, 7, 4, 3, 1 };
nextPermutation(nums);
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + " ");
}
System.out.println();
}
}
参考
- 下一个排列——题解一
- 下一个排列——题解二
- LeetCode 31 Next Permutation(下一个排列)
- 一次搞懂全排列——LeetCode四道Permutations问题详解