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

本文共 1315 字,大约阅读时间需要 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

本题相当于全排的一种变种。根据当前的排序来找下一个排序结果。先上代码

class Solution {public:    void nextPermutation(vector
& nums) { int pos = -1; int len = nums.size(); for(int i = len-1; i>0; i--){ if(nums[i] > nums[i-1]){ pos = i-1; break; } } if(pos < 0){ reverse(nums, 0, len-1); return; } for(int i = len - 1; i > pos; i--){ if(nums[i] > nums[pos]){ int tmp = nums[pos]; nums[pos] = nums[i]; nums[i] = tmp; break; } } reverse(nums, pos+1, len-1); } void reverse(vector
& num, int begin, int end){ int l = begin; int r = end; while(l

步骤大致分为三步:

1)找到最后一个升序的位置
2)若不存在则直接反排,否则3)
3)找到Pos之后最后一个比它大的位置,然后交换,对pos之后的元素反排。

转载地址:http://ojtsi.baihongyu.com/

你可能感兴趣的文章
8.装饰模式(Decorator Pattern)
查看>>
OpenGL12-shader(GLSL)着色语言2-(参数传递)(代码以上传)
查看>>
谈谈我对正则表达式的认识
查看>>
[2018湖南省队集训] 6.24 T1 marshland
查看>>
java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer)
查看>>
linux 安装python3
查看>>
第27月第6天 gcd timer
查看>>
通过图片对比带给你不一样的KMP算法体验
查看>>
BlockingQueue
查看>>
Dungeon Master
查看>>
Histogram
查看>>
URL List by Category
查看>>
Codeforces 256D Liars and Serge dp
查看>>
多重背包(MultPack = ZeroOnePack + CompletePack)
查看>>
Material Design 控件 (一)
查看>>
double中首字母大写与小写的区别
查看>>
重装win10系统
查看>>
NLP分词
查看>>
transition 总结
查看>>
渗透测试入门DVWA 教程1:环境搭建
查看>>