leetcode —— 31. 下一个排列
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须原地修改,只允许使用额外常数空间。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/next-permutation
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
——————————————————
解题思路:首先需要知道字典序的意思,意思的数组的排序是按照字典的规则排序的。
对于上面这个数组,按照字典序,下一个较大的字典序为
也就是首先将图中的5和4进行交换,那么数字由158476531变为158576431,也就是在4之后的所有数字中选择一个大于4的最小值,也就是5。然后需要对交换后的76531进行排序,变为13567,数字就变为158513467。
因此我们整体的计算方法为:
(1)倒序遍历,当nums[i]<nums[i+1]的时候,就得到了要交换的数值。比如上面的4;
(2)从4向后遍历,4的位置为nums[i],当遍历到nums[k]>nums[i]>nums[j]时,将nums[k]和nums[i]的位置进行交换;
(3)将nums[i]之后的数据进行从小到大排序;
其Python代码如下:
class Solution:def nextPermutation(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""length = len(nums)i = length - 2while i>=0 and nums[i] >= nums[i+1]: # 找到nums[i]<nums[i+1]的位置i-=1if i>=0: # 交换位置j = i+1while j<length and nums[j]>nums[i]:j+=1temp = nums[j-1]nums[j-1] = nums[i]nums[i] = tempL = i+1 # 将nums[i]之后的数据进行排序R = length-1while L<R:temp = nums[L]nums[L] = nums[R]nums[R] = tempL+=1R-=1
leetcode —— 31. 下一个排列相关推荐
- Java实现 LeetCode 31下一个排列
31. 下一个排列 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许 ...
- LeetCode 31. 下一个排列(线性扫描)
1. 题目 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外 ...
- Leetcode 31. 下一个排列 (每日一题 20210831)
实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数).如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列).必须 原地 ...
- LeetCode.31 下一个排列
题目描述 实现获取下一个排列的算法,算法需要将给定的数组,重新排列成下一个更大的排列(即组合出下一个更大的数字). 如果不存在下一个更大的排列,则将数字重新排列成最小的排列. 题目思路 我们可以使用如 ...
- leetcode 31.下一个排列
题目 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外常数空 ...
- LeetCode 31. 下一个排列 Next Permutation
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外常数空间. ...
- LeetCode 31 下一个排列
https://leetcode-cn.com/problems/next-permutation/ 解决方案 class Solution {public void nextPermutation( ...
- 【LeetCode】【HOT】31. 下一个排列
[LeetCode][HOT]31. 下一个排列 文章目录 [LeetCode][HOT]31. 下一个排列 package hot;import java.util.Arrays;public cl ...
- LeetCode每日一题--31. 下一个排列(数学)
题目:跳转至 31. 下一个排列 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原 ...
最新文章
- 和12岁小同志搞创客开发:拿到一款控制器,要怎么分析?
- 机器学习 —— 概率图模型(推理:连续时间模型)
- Vivado HLS error: Cannot find ISE in the PATH variable or it's an unsupported version
- RedHat 关闭selinux
- [第16天]IIS UNICODE 编码漏洞
- (原创)浅谈任意文件下载漏洞的利用
- win服务器创建文件夹命令,Win10系统如利用命令提示符或WSL创建任意大小空白文件...
- 基于.NET Standard的分布式自增ID算法--Snowflake
- 沃尔沃主动召回40万台车,只因一个罕见的问题
- 小学用计算机画画的课件,用计算机画图画.ppt
- 定制Eclipse IDE之功能篇(二)
- C#调用GDI+1.1中的函数实现高斯模糊、USM锐化等经典效果。
- Android App 启动时立即崩溃无法debug的解决方法
- 一个游戏是如何被设计和开发出来的
- JAVA验证码存在哪里了_java实现验证码功能
- 前端实现Office在线预览 (一)
- cenos回到linux桌面快捷键,CentOS 常用命令及快捷键整理
- 高斯法计算矩阵的行列式
- Android卡顿掉帧问题分析之原理篇
- vscode win10笔记本 蓝屏_遇到win10电脑蓝屏怎么办_简单解决win10蓝屏的方法
热门文章
- Mobile and MID opportunities in APAC
- 结合 live-reload 实现自动刷新
- 面试官系统精讲Java源码及大厂真题 - 17 并发 List、Map源码面试题
- 容器编排技术 -- Kubernetes 架构
- 使用Python批量压缩图片
- C#中的异步编程--探索await与async关键字的奥妙之处,原来理解和使用异步编程可以这么简单
- Android BGradualProgress 多种渐变、直角or弧角、进度条、加载条
- 使用dockerfile自动化构建镜像
- js 闭包函数 构造函数_JavaScript中的闭包,库里函数和酷抽象
- mvp最小可行产品_我们如何打造最低可行产品(MVP)