class Solution {
public:
void nextPermutation(vector<int>&nums) {
int len = nums.size();
int k = -, l = , i = ;//注意三个变量的初始化值 for (i = len - /*即倒数第二个元素(逆序遍历)*/;i >= ;--i)
if (nums[i + ] > nums[i]) {
k = i;
break;//因为是逆序,故此时得到的k一定是最大的
} if (k == -) {
reverse(nums.begin(), nums.end());//此时代表原数组为逆序排列,故直接反转
return;
} //接下来找i
for (i = len - ;i >= ;--i) {
if (nums[i] > nums[k]) {
l = i;
break;
}
} //二者交换
swap(nums[k], nums[l]); //再反转k之后的元素(不包括nums[k])
reverse(nums.begin() + k + , nums.end());
}
};

补充一个非常复杂,不美观的版本,使用python实现,也可以AC,能写出来我也挺佩服自己的。

这个版本的主要思想就是从后向前找,记录已查找范围的最大值,当查找到一个值a比已查找区域的最大值maxnum要小的时候,就可以进行换位操作了。

但是要确定一个在已查找区域中比a值大的最小的那个值来进行交换。所以这段代码写的不太美观,如果有高级一点的api可能更美观一些吧。

 class Solution:
def nextPermutation(self, nums: 'List[int]') -> 'None':
for i in range(len(nums)-1,-1,-1):
basenum = nums[i]
maxnum = basenum
for j in range(i-1,-1,-1):
curnum = nums[j]
maxnum = max(maxnum,curnum)
if curnum < maxnum:
for x in sorted(nums[j:]):
if x > curnum:
z = j - 1
for y in nums[j:]:
z += 1
if x == y:
slices1 = nums[j:z]
slices2 = nums[z+1:]
slices1.extend(slices2)
nums[j] = nums[z]
nums[j+1:]=sorted(slices1)
return nums.sort()

leetcode31的更多相关文章

  1. LeetCode31 Next Permutation

    题目: Implement next permutation, which rearranges numbers into the lexicographically next greater per ...

  2. [Swift]LeetCode31. 下一个排列 | Next Permutation

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

  3. leetcode31题:下一个排列

    实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外常数空间. ...

  4. LeetCode31.下一个排列 JavaScript

    实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外常数空间. ...

  5. 下一个排列(Leetcode31)解读

    本题代码来自Leetcode官方,个人对其理解后,生成自己的注解,以便更好的让读者理解.如有侵权,立即删除! public class Main31 { public static void main ...

  6. LeetCode31 Next Permutation and LeetCode60 Permutation Sequence

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

  7. leetcode31 下一个排列 字典序

    数字的字典序就是比大小 先想几个例子  123_>132  1243-> 1324 ,12453-> 12534 1.不可排的序列就是降序序列 2.两个相同长度的串比大小,前面相同, ...

  8. LeetCode46 回溯算法求全排列,这次是真全排列

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode的26篇文章,我们来实战一下全排列问题. 在之前的文章当中,我们讲过八皇后.回溯法,也提到了全排列,但是毕竟没有真正写 ...

  9. LeetCode 56,57,60,连刷三题不费劲

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题的第34篇文章,刚好接下来的题目比较简单,很多和之前的做法类似.所以我们今天出一个合集,一口气做完接下来的57.5 ...

随机推荐

  1. PyCharm基本用法

    1.修改字体 在file->settings下进行修改如下图: 2 修改颜色背景 在file->settings下修改,如图: 3连接git 点击file->settings,选择版 ...

  2. oracle 汉字转拼音

    oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等) 效果如下: Oracle 字符集 GBK 没有问题 , UTF -8 需要修改一下 Sql代码 --oracle汉字转拼音 PACKAGE ...

  3. 18-09-20 关于Xlrd和Xlwt的初步学习

    #一关于利用xlrd 打开Excel 读取数据的简单介绍import xlrd """ #1 xlrd 基础的用法:读取,获取sheet,获取内容,行数,列数def re ...

  4. Echarts tooltip 坐标值修改

    tooltip: { trigger: 'axis', position:function(p){ //其中p为当前鼠标的位置 console.log(p); ] + , p[] - ]; } },

  5. 剑指Offer 36. 两个链表的第一个公共结点 (链表)

    题目描述 输入两个链表,找出它们的第一个公共结点. 题目地址 https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?tp ...

  6. Windows10 VS2017 C++信号处理

    #include "pch.h" #include <iostream> #include <csignal> #include <windows.h ...

  7. SQL注入之Sqli-labs系列第三十四关(基于宽字符逃逸POST注入)和三十五关

    开始挑战第三十四关和第三十五关(Bypass add addslashes) 0x1查看源码 本关是post型的注入漏洞,同样的也是将post过来的内容进行了 ' \ 的处理. if(isset($_ ...

  8. 由于找不到 opencv_world320.dll,无法继续执行代

    首先找到自己软件安装(解压)的路径openCV (安装(解压)目录\opencv\build\x64\vc14\bin) 我的安装(解压)目录是:F:\OpenCV\Three320\opencv\b ...

  9. confluence6.3.1部署+数据迁移

    目录: 环境准备 搭建方法 数据迁移 搭建过程中的bug 1,confluence部署 1.1,环境准备 Java:jdk1.8 mysql: 数据库编码规则选择utf8 -- UTF-8 Unico ...

  10. 服务容错和Hystrix

    一.雪崩效应 在微服务架构中,通常有多个服务层调用,如果某个服务不可用,造成调用的服务也不可用,造成整个系统不可用的情况,叫做雪崩效应 二.Hystrix 放雪崩利器Hystrix,基于Netflix ...