Leetcode Next Permutation
2016-07-21 23:31
288 查看
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.
Difficulty: Medium
Solution: http://www.programcreek.com/2014/06/leetcode-next-permutation-java/
public class Solution {
public void reverse(int[] nums, int left, int right){
while(right >= left){
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
left++;
right--;
}
return;
}
public void nextPermutation(int[] nums) {
int len = nums.length;
int p = 0;
for(int i = len - 2; i >= 0; i--){
if(nums[i] < nums[i + 1]){
p = i;
break;
}
}
int q = 0;
for(int i = len - 1; i >= 0; i--){
if(nums[i] > nums[p]){
q = i;
break;
}
}
if(p == 0 && q == 0){
reverse(nums, 0, len - 1);
return;
}
int temp = nums[p];
nums[p] = nums[q];
nums[q] = temp;
if(p < len)
reverse(nums, p + 1, len - 1);
}
}
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
Difficulty: Medium
Solution: http://www.programcreek.com/2014/06/leetcode-next-permutation-java/
public class Solution {
public void reverse(int[] nums, int left, int right){
while(right >= left){
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
left++;
right--;
}
return;
}
public void nextPermutation(int[] nums) {
int len = nums.length;
int p = 0;
for(int i = len - 2; i >= 0; i--){
if(nums[i] < nums[i + 1]){
p = i;
break;
}
}
int q = 0;
for(int i = len - 1; i >= 0; i--){
if(nums[i] > nums[p]){
q = i;
break;
}
}
if(p == 0 && q == 0){
reverse(nums, 0, len - 1);
return;
}
int temp = nums[p];
nums[p] = nums[q];
nums[q] = temp;
if(p < len)
reverse(nums, p + 1, len - 1);
}
}
相关文章推荐
- PAT乙级 1022 D进制的A+B
- Anaconda中安装MinGW
- (OK) install_Xen_on_Fedora.txt
- neural-networks-and-deep-learning multiple_eta.py
- Codeforces Beta Round #69 (Div. 1 Only) C. Beavermuncher-0xFF 树上贪心
- java中File类浅解析
- Leetcode Wildcard Matching
- 文件名中不要使用空格
- CodeForces612AThe Text Splitting(枚举)
- 一个笑话引发的记录
- 系列文章之四 用shell脚本制作TexturePacker批量拼图工具(1)
- 蓝桥杯 ADV-143算法提高 扶老奶奶过街
- linux svn 服务端搭建
- SurfaceView, TextureView, SurfaceTexture等的区别
- poj 2653
- 2016 Multi-University Training Contest 2题解报告
- 扬帆——起航
- 阿里云ossfs同步问题
- iOS中block介绍(四)揭开神秘面纱(下)
- 蓝桥杯 ADV-205算法提高 拿糖果(动态规划)