您的位置:首页 > 其它

LeetCode-31-Next Permutation(找规律/证明)-Medium

2016-01-02 12:28 489 查看
题意理解:

更换先前的vector中的内容,使得新vector中内容组成的字符串str2,为先前vector中内容组成的字符串str1,按字典序字母排列的后一个排列(简单的说就是str2为按字典序排列中,比str1大的组合中的最小组合)。

题目分析:

1. 注意不能分配新的内存空间;

2. 找规律,假设vector中的内容为[c0, c1, c2, c3],从结尾向开始方向查找,

1)查找到第一个Cm>Cm-1的字符;

2)将Cm-Cn中的字符按从小到大顺序排序,并找到第一个比Cm-1大的字符Cr;

3)交换Cm-1和Cr;

解题代码:

class Solution {
public:
void nextPermutation(vector<int>& nums) {
int size=nums.size();
if(size<=1){
return;
}

vector<int>::iterator iter=nums.end();
bool flag=false;
for(int i=size-1; i>0; i--){
iter--;
if(nums[i]>nums[i-1]){
int t=nums[i-1];
reverse(iter, nums.end());
for(int j=i; j<size; j++){
if(t<nums[j]){
nums[i-1]=nums[j];
nums[j]=t;
break;
}
}

flag=true;
break;
}
}

if(!flag){
reverse(nums.begin(), nums.end());
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: