31. Next Permutation
2016-12-14 13:45
141 查看
题意:就是生成比这个排列大的下一个排列,如果排列已经最大了,就直接生成最小的下一个排列。
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
思路:对于这一类排列的问题,都是有一个大概的思路的,都有一点像递归或者动态规划的感觉,首先,找到最长的非增后缀,然后将后缀的前一位设为标志位,再从后缀中从后往前地找出第一个大于标志位的数,把它和标志位调换顺序,最后把后缀反转一下就ok了。其实就是相当于找出临界的后缀,再对应改变前一位,之后将后缀化为最小的结果。这题具体思路可以看这个思路。
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
思路:对于这一类排列的问题,都是有一个大概的思路的,都有一点像递归或者动态规划的感觉,首先,找到最长的非增后缀,然后将后缀的前一位设为标志位,再从后缀中从后往前地找出第一个大于标志位的数,把它和标志位调换顺序,最后把后缀反转一下就ok了。其实就是相当于找出临界的后缀,再对应改变前一位,之后将后缀化为最小的结果。这题具体思路可以看这个思路。
class Solution(object): def nextPermutation(self, nums): """ :type nums: List[int] :rtype: void Do not return anything, modify nums in-place instead. """ i, j = len(nums)-2, len(nums)-1 while nums[i+1] <= nums[i] and i >= 0: i -= 1 if i < 0: nums = nums[::-1] else: while nums[i] >= nums[j] and j > 0: j -= 1 nums[i], nums[j] = nums[j], nums[i] nums[i+1:] = nums[len(nums)-1:i:-1]
相关文章推荐
- 31 个用来测试你网站各项性能的免费在线工具
- 《那些年啊,那些事——一个程序员的奋斗史》——31
- zeroMQ初体验-31.发布/订阅模式进阶-黑盒的高速订阅者
- [IT 男人帮 -10/31] 雨林木风CEO赖霖枫: 互联网冬天前的思考
- [转载]ESFramework介绍之(31)―― 消息分类及对应的处理器
- (转)测试网站各项性能的31 个免费在线工具
- 【记忆化搜索】 HDU-4155-The Game of 31
- Item 31: Making functions virtual with respect to more than one object.(More Effective C++)
- Python实例31[批量对目录下文件重命名]
- poj 4155 The Game of 31
- Android学习札记31:收集到的一些关于Handler和Runnable的问题(2)
- 程序30和程序31
- Qt学习之路(31): 一个简易画板的实现(QWidget)
- oracle 11g 学习笔记 10_31(2)_维护数据的完整性
- 新时尚Windows8开发(31):去掉文本中的HTML标记
- 图片的定位2(31)
- 测试网站各项性能的31 个免费在线工具
- 题目31:搬水果
- python基础31[python IDE之Eclipse+PyDev]
- python技巧31[python文件的encoding和str的decode]