package Other
import "slices"
func nextPermutation(nums []int) {
size := len(nums)
i, j := -1, -1
// (1) 从右往左寻找递减序列的左边界位置i
for k := size - 2; k >= 0; k-- {
if nums[k] < nums[k+1] {
i = k
break
}
}
if i != -1 {
// (2) 在递减序列中寻找大于nums[i]的最小值位置j
// 随后交换i位置和j位置的值
for k := size - 1; k > i; k-- {
if nums[k] > nums[i] {
j = k
break
}
}
nums[i], nums[j] = nums[j], nums[i]
}
// (3) 反转递减序列,使其按升序排列
slices.Reverse(nums[i+1:])
}