func nextPermutation(nums []int) {
if len(nums)==1{
return
}
i , j ,k := len(nums)-2, len(nums)-1, len(nums)-1
for i>=0 && nums[i]>=nums[j]{
//从后向前循环 寻找到第一个非降序数对 即nums[i]>=nums[j]
i--
j--
}
if i<0{
// 若遍历完了整个数组 即数组字典序为最大 输出最小排列
sort.Ints(nums)
return
}
for i>=0 && nums[i]>=nums[k]{
// 在上述第一个非降序数对之后,寻找到第一个大于nums[i]的元素 即需要交换的位置
k--
}
nums[k],nums[i]=nums[i],nums[k]
//将交换后的位置之后序列 顺序排列为最小字典序组合
for i, j := j, len(nums)-1; i < j; i, j = i+1, j-1 {
nums[i], nums[j] = nums[j], nums[i]
}
return
}
golang leetcode31 下一个排列
最新推荐文章于 2024-08-16 23:47:55 发布