您的位置:首页 > 其它

leetcode Next Permutation

2015-02-12 15:09 260 查看
题目:next permutation

题意:找到一个数组的下一种排列,eg: 12345->12354 54321->12345 1324->1342

思路:找了半天规律还错了。。。看了别人的结题报告,感觉碉堡了

1.从后向前找到第一个升序排列的地方,比如12345的4处,1324的2处,设为第i个位置,如果找到头都没找到,那么就整个全倒置相当于54321->12345的情况

2.从第i个位置的后一个开始向后找,直到找到第一个比i大的数,与位置i的数互换位置

class Solution {
public:
void nextPermutation(vector<int> &num)
{
if(num.empty()) return;
int i;
for(i = num.size()-2;i>=0;i--){
if(num[i]<num[i+1])
break;
}
reverse(num.begin()+i+1, num.end());
if(i==-1) return;   //当i=-1时,证明全都倒置了,相当于54321->12345
vector<int>::iterator itr = upper_bound(num.begin()+i+1,num.end(),num[i]);
swap(*itr,num[i]);

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