个人思路总结:
其实就是从数组倒着查找,找到nums[i] 比nums[i+1]小的时候,就将nums[i+1]到nums[nums.length - 1]进行排序。排序后,找到第一个比nums[i]大的数据,将其与nums[i]互换即可。
需考虑的边界情况:
(1)只有一个元素或者为空,不做处理
(2)原数组已经为最大,即所有元素递减排列,将其反序变到最大即可。
代码如下:
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int index = nums.size()-1;
int i = 0;
if(nums.size()==0||nums.size()==1)
return;
for(index;index>0;index--)
{
if(nums[index]>nums[index-1])
{
sort(nums.begin()+index,nums.end());
for(i=index;i<nums.size();i++)
{
if(nums[i]>nums[index-1])
break;
}
int tmp = nums[index-1];
nums[index-1] = nums[i];
nums[i] = tmp;
break;
}
}
if(index==0)
sort(nums.begin(),nums.end());
}
};