leetcode 0031
说明
只是为了记录一下,不求多快,也不深究。
会简要描述思路,代码中不写注释。
如碰到不会做的用了别人代码会在博客中标出。
题目描述
思路
如果已经是最大,倒序一下。
否则的话,找出后一个比前一个数大的位置,i-1和i。
从i之后找出比i-1大的最小的数next,交换i-1和next。
再给i之后的数组排一下序。
class Solution {
public void nextPermutation(int[] nums) {
if (nums.length < 2) {
return;
}
boolean isLargest = true;
for (int i = nums.length - 1; i > 0; i--) {
if (nums[i] > nums[i - 1]) {
isLargest = false;
int next = i - 1;
for (int j = i; j < nums.length; j++) {
if (nums[j] <= nums[i - 1]) {
continue;
} else {
if (next == i - 1) {
next = j;
} else {
if (nums[next] > nums[j]) {
next = j;
}
}
}
}
int temp = 0;
temp = nums[next];
nums[next] = nums[i - 1];
nums[i - 1] = temp;
Arrays.sort(nums, i, nums.length);
return;
}
}
if (isLargest) {
for (int i = 0, j = nums.length - 1; i < j; i++, j--) {
int temp = 0;
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
return;
}
}
}