zoukankan      html  css  js  c++  java
  • 下一个排列

    # 实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 
    #
    # 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
    #
    # 必须 原地 修改,只允许使用额外常数空间。
    #
    #
    #
    # 示例 1:
    #
    #
    # 输入:nums = [1,2,3]
    # 输出:[1,3,2]
    def nextPer(nums):
        print(nums)
        i = len(nums)-2  # 从倒数有意义长度开始
        while i>=0 and nums[i]>=nums[i+1]:     # 比较当前数字和后一个数字大小,如果当前较大继续往前搜索,i-1;直至找到后一个比当前大的
            i -= 1
        if i>=0:
            j = len(nums)-1     # 计算最长索引下标
            while j>=0 and nums[i]>=nums[j]:    # 比较当前遍历值和第一遍历值的大小,前者大继续,j-1;前者小,数字要替换
                j -= 1
            nums[i], nums[j] = nums[j], nums[i]
        left, right = i+1, len(nums)-1       # 重新确定索引i之后的数值,重新排列
        while left<right:
            nums[left], nums[right] = nums[right], nums[left]
            left += 1
            right -= 1
        print(nums)
    时刻记着自己要成为什么样的人!
  • 相关阅读:
    leetcode 39 Combination Sum
    C/C++ 单元测试 catch
    二叉树
    线性表
    POJ1002
    HDU4329
    hdu 4329
    java代码优化总结1
    Linux操作系统常用命令总结1
    java开发基础知识总结1
  • 原文地址:https://www.cnblogs.com/demo-deng/p/14954373.html
Copyright © 2011-2022 走看看