31. Next Permutation
来源:互联网 发布:自学游戏编程 编辑:程序博客网 时间:2024/06/05 10:55
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
解题思路:
以3457621为例,
1.从尾部寻找第一个满足p(i-1)<p(i)的情况,即
35-7621,5<7
2.从i-1往回找最小的大于p(i-1)的数minLarge,交换p(i-1),minLarge.
367521
3.将i-1后面的数从小到大排序,若是全部是不同的数,只需逆序,
3461257
void nextPermutation(vector<int>& nums) { int small=nums[nums.size()-1]; int i,j,minLarge; bool flag=false; for(i=nums.size()-1;i>0;i--){ if(nums[i]>nums[i-1]) { flag=true; small=nums[i-1]; break; } } if(flag) { int big=nums[i]; minLarge=i; for(j=i;j<nums.size();j++){ if(nums[j]>small) { if(big>nums[j]) { big=nums[j]; minLarge=j; } } } swap(nums[i-1],nums[minLarge]); vector<int>::iterator iter=nums.begin()+i; sort(iter,nums.end()); } else{ sort(nums.begin(),nums.end()); } }
0 0
- [LeetCode]31.Next Permutation
- LeetCode --- 31. Next Permutation
- [Leetcode] 31. Next Permutation
- LeetCode 31.Next Permutation
- 31. Next Permutation
- [leetcode] 31.Next Permutation
- [leetcode] 31. Next Permutation
- *LeetCode 31. Next Permutation
- 31. Next Permutation
- Leetcode 31. Next Permutation
- 31. Next Permutation
- 31. Next Permutation
- 31. Next Permutation
- leetcode 31. Next Permutation
- 31. Next Permutation LeetCode
- 31. Next Permutation
- 31. Next Permutation
- 31. Next Permutation
- 【Qt开发】qt中涉及到空格包含路径的解决办法
- 点滴记录——Ubuntu 14.04中安装Sublime Text 3并使用SublimeClang插件
- 一行代码了解网站被访问最多的URL
- java根据关键字列出文件夹下的文件
- 最近点计算
- 31. Next Permutation
- HDU 5492 Find a path(DP)
- 从零开始写C# MVC框架之--- 设计用户、菜单、组织机构、角色等表
- uva 10214 Trees in a wood 两个区间内的互素数对
- hdu 4218 IMBA?
- Java线程的生命周期
- 双重有序,单调栈(贩卖土地,uva 12265)
- UBUNTU 彻底删除 MYSQL 然后重装 MYSQL
- 实战项目助你掌握JavaSE知识