看了半天的题目,没有看懂是什么意思,就是让你找一个比现在这种排列稍微大一点的排列,如果现在的排列已经是最大的,就返回最小的排列
思路整理:
- 从数组的倒数第二个开始,找前一个数比后一个数小的位置
- 如果索引大于0的话,从最后一个开始,找比当前索引位置大的数,进行交换,如果i不大于0,就说明当前排列为最大的形式,返回最小的形式就好了
- 将当前的排列转换为只比原排列大一点的数,在第一步中其实已经找见了发现在i + 1在len(nums) - 1 的区间中,的哦是降序排列的,但是现在是要进行升序排列,同样进行位置的调整即可。
func nextPermutation(nums []int) {
i := len(nums) - 2
for i >= 0 && nums[i] >= nums[i + 1]{
i--
}
if i >= 0{
j := len(nums) - 1
for j > i && nums[j] <= nums[i]{
j--
}
nums[i],nums[j] = nums[j],nums[i]
}
//交换相对小一点的值
l,r := i + 1,len(nums) - 1
for l < r{
nums[l],nums[r] = nums[r],nums[l]
l++
r--
}
}



