标签:
感觉又是一道智商题啊,方法比较难以想到,想到后就容易了,没有自己写代码,直接看的网上的答案·················································
题意寻找比当前排列顺序大的下一个排列。
1)因为降序序列是没法变的更大的,所以从后往前找到第一个升序对的位置。
2)然后就存在调整大小排列顺序的可能,从后往前找到比当前位置大的元素,交换之。
3)当前位置后面的元素还是降序排列,将他们反转得到最小顺序排列。其实就是原来当前位置元素后面是最大的排列,而交换后的新元素之后是最小的排列,他们就是相邻的顺序。
当不存在升序,则当前排列是最大排列,只要旋转整个序列变成最小排列。
class Solution { public: void nextPermutation(vector<int>& nums) { int i,j,len=num.size(); for(i=len-2;i>=0;--i) { if(num[i+1]>num[i]) { for(j=len-1;j>i-1;--j)if(num[j]>num[i])break; swap(num[i],num[j]); reverse(num.begin()+i+1,num.end()); return; } } reverse(num.begin(),num.end()); return; } };
标签:
原文地址:http://www.cnblogs.com/qiaozhoulin/p/4774229.html