博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Leetcode】Next Permutation
阅读量:5129 次
发布时间:2019-06-13

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

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, do not allocate 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 class Solution { 2 public: 3     void nextPermutation(vector
&num) { 4 int i, j, k, size = num.size(); 5 if (size < 2) { 6 return; 7 } 8 for (i = size - 2; i >= 0; --i) { 9 if (num[i] < num[i + 1]) {10 break;11 }12 }13 for (j = size - 1; j > i; --j) {14 if (num[j] > num[i]) {15 break;16 }17 }18 swap(num[i], num[j]);19 for (k = 0; k < (size - i - 1) / 2; ++k) {20 swap(num[k + i + 1], num[size - k - 1]);21 }22 }23 };
View Code

仔细分析排列的特征,发现如下方法:

从后往前扫描。找到第一个“打破递增”的位置,下一个排列中该位置元素将被后面的递增序列中,大于其原始值的最小元素所取代。然后,把后半部分的元素排序(原本已经有序,只需要反转即可)。如图:

 

 

来源:http://fisherlei.blogspot.com/2012/12/leetcode-next-permutation.html

转载于:https://www.cnblogs.com/dengeven/p/3607427.html

你可能感兴趣的文章
发布功能完成
查看>>
【原】小程序常见问题整理
查看>>
C# ITextSharp pdf 自动打印
查看>>
【Java】synchronized与lock的区别
查看>>
django高级应用(分页功能)
查看>>
【转】Linux之printf命令
查看>>
关于PHP会话:session和cookie
查看>>
STM32F10x_RTC秒中断
查看>>
display:none和visiblity:hidden区别
查看>>
C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
查看>>
牛的障碍Cow Steeplechase
查看>>
Zookeeper选举算法原理
查看>>
3月29日AM
查看>>
利用IP地址查询接口来查询IP归属地
查看>>
HTML元素定义 ID,Class,Style的优先级
查看>>
构造者模式
查看>>
http和https的区别
查看>>
Hbuild在线云ios打包失败,提示BuildConfigure Failed 31013 App Store 图标 未找到 解决方法...
查看>>
找到树中指定id的所有父节点
查看>>
今天新开通了博客
查看>>