链接:https://leetcode-cn.com/problems/next-permutation/
这道题的重点是搞清楚如何生成下一个排列:
- 从右至左遍历数组,找到第一个满足 a [ i ] < a [ i + 1 ] a[i]<a[i+1] a[i]<a[i+1]的下标 i i i
- 在 a [ i ] a[i] a[i]的右边找到比它大的最小元素,互换这两个元素
- 将数组下标 i + 1 i+1 i+1至末尾元素倒置
java代码:
class Solution {
public void nextPermutation(int[] nums) {
int i = nums.length-2;
while(i>=0)
{
if(nums[i]<nums[i+1])
break;
i--;
}
if(i>=0)
{
for(int j = nums.length-1;j>=0;j--)
{
if(nums[j]>nums[i])
{
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
break;
}
}
}
for(int k = i+1,j = nums.length-1;k<j;k++,j--)
{
int temp = nums[k];
nums[k] = nums[j];
nums[j] = temp;
}
}
}