Next Permutation问题及解法
2017-06-03 17:01
337 查看
问题描述:
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.
问题分析:
本题题意理解起来可能比较难,其实主要意思是求解一个数组的下一个全排列,详细过程可参考一下http://blog.csdn.net/qq575787460/article/details/41215475文章的讲解。
过程详见代码:
class Solution {
public:
void nextPermutation(vector<int>& nums) {
if(nums.empty()) return;
int len = nums.size();
int i = len - 1;
for(;i > 0; i--)
{
if(nums[i] > nums[i-1])
{
for(int j = len - 1; j >= i; j--)
{
if(nums[j] > nums[i-1])
{
swap(nums[i-1],nums[j]);
break;
}
}
sort(nums.begin() + i,nums.end());
break;
}
}
if(i==0) sort(nums.begin(),nums.end());
}
};
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
问题分析:
本题题意理解起来可能比较难,其实主要意思是求解一个数组的下一个全排列,详细过程可参考一下http://blog.csdn.net/qq575787460/article/details/41215475文章的讲解。
过程详见代码:
class Solution {
public:
void nextPermutation(vector<int>& nums) {
if(nums.empty()) return;
int len = nums.size();
int i = len - 1;
for(;i > 0; i--)
{
if(nums[i] > nums[i-1])
{
for(int j = len - 1; j >= i; j--)
{
if(nums[j] > nums[i-1])
{
swap(nums[i-1],nums[j]);
break;
}
}
sort(nums.begin() + i,nums.end());
break;
}
}
if(i==0) sort(nums.begin(),nums.end());
}
};
相关文章推荐
- 迷宫问题解法汇总
- 编程之美3.7队列中取最大值操作问题(新解法,空间复杂度比原解法低)
- Maximum Product of Three Numbers问题解法
- C++ 求矩阵最短路问题最简单最暴力的dp解法
- License Key Formatting 问题及解法
- Josephu问题的数学解法
- 八皇后问题详细解法
- 最大K个数问题的Python版解法总结
- Image Smoother问题及解法
- 约瑟夫问题的解法集锦
- 洛谷 神奇的解法专题 烧水问题
- 【动态规划】 Google面试题 爬楼梯问题 斐波那契问题的多种解法
- 装配线(工作站)问题的两种解法
- LeetCode Single Number I & II 都符合两个问题额外要求的 通用解法 与 思考过程
- 《我的twitter技术面试失败》中墙之间水坑装水问题的更烂解法(Java解)
- 我的解法:五间房子中谁养鱼的问题
- n皇后问题的递归解法
- Optimal Division问题及解法
- Print Binary Tree问题及解法
- 第十二周项目5----迷宫问题之图深度优先遍历解法