LeetCode 31. Next Permutation-- Python 解法–数学题–比当前数大的最小的数

此文首发于我的个人博客:LeetCode 31. Next Permutation-- Python 解法–数学题–比当前数大的最小的数 — zhang0peter的个人博客


LeetCode题解文章分类:LeetCode题解文章集合
LeetCode 所有题目总结:LeetCode 所有题目总结


题目地址:Next Permutation - LeetCode


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 in-place 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

这道题目一看就知道是经典的数学题,而且根据统计是高频面试算法题,Facebook尤为喜欢这题。

这道题目看起来简单,做起来难度还是挺大的。

1.先考虑特殊情况,如果这个数是完全倒叙排序的,也就是最大的,那么只要返回正序排序最小的即可。

2.想要实现比当前数大的最小的数,改变低位,不要修改高位。

3.如果一个数的低位部分是倒叙排序,然后高位不是倒序排序,那么交换高位和低位中大于它的这个数,然后把低位顺序排序即可。

4.这道题目另外一个需要注意的难点是需要就地排序,不能把指针引用指向新的数组。

Python解法如下:

class Solution:def nextPermutation(self, nums) -> None:"""Do not return anything, modify nums in-place instead."""flag = -1for i in range(len(nums)-2, -1, -1):if nums[i] < nums[i+1]:flag = ibreakif flag == -1:nums.sort()else:for i in range(len(nums)-1, flag, -1):if nums[i] > nums[flag]:nums[i], nums[flag] = nums[flag], nums[i]nums[flag+1:] = sorted(nums[flag+1:])break

时间复杂度为O(n),空间复杂度为O(1)。

LeetCode 31. Next Permutation-- Python 解法--数学题--比当前数大的最小的数相关推荐

  1. LeetCode 41. First Missing Positive--Python 解法--数学题-找到不存在的最小正整数-O(1)空间复杂度

    题目地址:First Missing Positive - LeetCode Given an unsorted integer array, find the smallest missing po ...

  2. 【数字全排列】LeetCode 31. Next Permutation

    LeetCode 31. Next Permutation 参考博客:http://www.cnblogs.com/grandyang/p/4428207.html Solution0:一个偷鸡摸狗的 ...

  3. 【Leetcode】5 longestPalindrome python解法

    leetcode第5题 longestPalindrome 最长回文子串 python解法 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 输入: " ...

  4. LeetCode 15. 3Sum--Java,Python解法

    题目地址: Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? ...

  5. leetcode: 31. Next Permutation

    Problem # coding=utf-8 # 假设数组中所有数值组成的排列组合是个循环列表,则返回该输入组合的下一组合. # # Implement next permutation, which ...

  6. java寻找最大的字母_【LeetCode(Java) - 744】寻找比目标字母大的最小字母

    [LeetCode(Java) - 744]寻找比目标字母大的最小字母 [LeetCode(Java) - 744]寻找比目标字母大的最小字母 文章目录 1.题目描述 2.解题思路 3.解题代码 1. ...

  7. LeetCode刷题(107)~制造字母异位词的最小步骤数【巧妙】

    题目描述 给你两个长度相等的字符串 s 和 t.每一个步骤中,你可以选择将 t 中的 任一字符 替换为 另一个字符. 返回使 t 成为 s 的字母异位词的最小步骤数. 字母异位词 指字母相同,但排列不 ...

  8. LeetCode刷题之python解法(持续更新)

    1. Two Sum 4行 class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:d = {}fo ...

  9. LeetCode 31 Next Permutation(下一个全排列)

    题目链接: https://leetcode.com/problems/next-permutation/?tab=Description Problem :寻找给定int数组的下一个全排列(要求:b ...

最新文章

  1. 资深专家深度剖析Kubernetes API Server第1章(共3章)
  2. 在Browser Application中使用XNA
  3. 含有参数的sql拼接_关于SQL语句参数中为多个带.字符串。
  4. 程序员修神之路--高并发优雅的做限流(有福利)
  5. 不管什么事,只要用心做,总不会太差!
  6. canvas js 绘图插件_Canvas专题—绘制柱状图(2)
  7. Oracle索引状态查询与索引重建
  8. Solidity API
  9. 7-9 一元多项式的乘法与加法运算 (20 分)
  10. 新浪微博批量删除微博的方法
  11. onenote登录显示服务器问题,onenote启动不了怎么回事 onenote为什么登录显示无法连接...
  12. VBA-1-如何在右键中添加“新建启用宏的工作簿.xlsm”
  13. 《IT项目经理成长手记》读后感
  14. 【百度小程序模板】百度小程序模板怎么制作
  15. 免费SVN、Git项目托管主机及网站介绍
  16. flink connector phoenix
  17. RedHat and Oracle 离线安装oracle教程
  18. C/C++:实现象棋游戏
  19. python集合的基本运算
  20. 华为天才少年造出自动驾驶单车!图纸已开源,硬件成本一万!

热门文章

  1. Drug Target Review | 筛选用于抗COVID-19的抗病毒化合物
  2. NLP(5) | 命名实体识别
  3. 其他算法-SVD奇异值分解
  4. 决策树算法(二)——构建数据集
  5. Android中获取手机的IMEI
  6. mysql元数据死锁日志_这个未修复的MySQL 5.7死锁Bug,你知道么?
  7. 华西生物医学大数据中心俞鹏课题组博士后招聘启事
  8. Nat. Ecol. Evol.:不想当化学家的物理学家不是好的生物学家
  9. Python使用matplotlib可视化Treemap图、treemap将分层数据显示为一组嵌套矩形,每一组都用一个矩形表示,该矩形的面积与其值成正比(Treemap)
  10. R语言生存分析COX回归分析实战:两种治疗方法发生肾功能损害的情况