博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode31. Next Permutation(思路及python解法)
阅读量:2242 次
发布时间:2019-05-09

本文共 1149 字,大约阅读时间需要 3 分钟。

Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.

If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).

The replacement must be  and use only constant extra memory.

Here are some examples. Inputs are in the left-hand column and its corresponding outputs are in the right-hand column.

1,2,3 → 1,3,2

3,2,1 → 1,2,3
1,1,5 → 1,5,1


改变数字排序,找到这些数字组成的下一个更大的数。如果当前数字已经是最大的数字,则返回最小的数字。

这道题想好怎么转换即可。

如果整个字符串都是升序排列,比如[1,2,4],则这个数字一定是三个数字所有组成方式最小的,只需要改变最后两个数字位置即可[1,4,2]。

如果整个字符串都是降序排列,比如[4,2,1],则一定是最大的数字,倒序即可得到答案[1,2,4]。

一个普通的字符串,比如[1,2,4,3,1],它应该得到的结果是[1,3,1,2,4]

方法就是从后到前,找到第一个不是升序排列的数字,这里是2,然后找到它后面字符串中刚刚比它大的数字,这里是3,交换顺序,变为[1,3,4,2,1],然后将这个数字后面的数字[4,2,1]倒置,最后就变为了[1,3,1,2,4]。

具体做法见代码。这里我将最后加了个-1是防止在找刚刚比非升序大的数字的时候出错。

class Solution:    def nextPermutation(self, nums: List[int]) -> None:        """        Do not return anything, modify nums in-place instead.        """                maxx=float('-inf')        for i in range(len(nums)-1,-1,-1):            if nums[i]>maxx:                maxx=nums[i]            elif nums[i]

 

转载地址:http://ojrbb.baihongyu.com/

你可能感兴趣的文章
Spring源码剖析2:初探Spring IOC核心流程
查看>>
Spring源码剖析5:JDK和cglib动态代理原理详解
查看>>
Spring源码剖析6:Spring AOP概述
查看>>
【Linux】进程的理解(二)
查看>>
【Linux】vim的简单配置
查看>>
ThreadLocal 那点事儿(续集)
查看>>
阳台做成榻榻米 阳台做成书房
查看>>
深入分析java线程池的实现原理
查看>>
mybatis中"#"和"$"的区别
查看>>
Hibernate与MyBatis区别
查看>>
如何禁用Eclipse的Validating
查看>>
据说看完这21个故事的人,30岁前都成了亿万富翁。你是下一个吗?
查看>>
SpringMVC学习笔记2
查看>>
Oracle知识点连载(一)
查看>>
Oracle知识点连载(二)
查看>>
Oracle知识点连载(三)
查看>>
Oracle知识点连载(五)
查看>>
关于三元运算符的类型转换问题
查看>>
笔记本怎么设置WIfi热点
查看>>
如何实现字符串的反转及替换?
查看>>