栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

leetcode第31题,下一个排列

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode第31题,下一个排列

leetcode第31题,下一个排列

看了半天的题目,没有看懂是什么意思,就是让你找一个比现在这种排列稍微大一点的排列,如果现在的排列已经是最大的,就返回最小的排列

思路整理:

  1. 从数组的倒数第二个开始,找前一个数比后一个数小的位置
  2. 如果索引大于0的话,从最后一个开始,找比当前索引位置大的数,进行交换,如果i不大于0,就说明当前排列为最大的形式,返回最小的形式就好了
  3. 将当前的排列转换为只比原排列大一点的数,在第一步中其实已经找见了发现在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--
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/644144.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号