很詭異的題,看了好幾遍題沒看懂說什麼,然後去搜了一下,方法如下:
- 從右往左遍歷 找到第一個索引滿足:,如果不存在就反轉整個數組
- 再找第二個索引,滿足:
- 交換和
- 最後從開始反轉整個數組
class Solution {
public void nextPermutation(int[] nums) {
int length = nums.length;
int k = -1, l = -1;
for (int i = length - 2; i >= 0; i--) {
if (nums[i] < nums[i+1]){
k = i;
break;
}
}
if (k == -1){
reverse(nums,0,length - 1);
return;
}
for (int i = length - 1; i >= 0; i--) {
if (nums[i] > nums[k]){
l = i;
break;
}
}
swap(nums, k, l);
reverse(nums, k+1, length - 1);
}
private void reverse(int[] nums, int start, int end) {
while (start < end){
swap(nums,start++,end--);
}
}
private void swap(int[] nums, int start, int end) {
nums[start] = nums[start] ^ nums[end];
nums[end] = nums[start] ^ nums[end];
nums[start] = nums[start] ^ nums[end];
}
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。