版权声明:只要梦想一天,只要梦想存在一天,就可以改变自己的处境。 https://blog.csdn.net/dongyanwen6036/article/details/85370094
如果给定数组是降序,则说明是全排列的最后一种情况.
举个例子[1]:
1 2 7 4 3 1
下一个排列是:
1 3 1 2 4 7
具体过程(核心思想
):如果从末尾往前看,数字逐渐变大,到了2时才减小的,然后我们再从后往前找第一个比2大的数字,是3,那么我们交换2和3,再把此时3后面的所有数字转置一下即可,步骤如下:
1 2
7 4 3 1
1 2 7 4 3
1
1 3
7 4 2
1
1 3 1
2
4
7
c++ code :
class Solution {
public:
void nextPermutation(vector<int>& nums) {
int n = nums.size();
int i = n - 2, j = n - 1;
while (i >= 0 && nums[i] >= nums[i + 1])i--;
if (i >= 0)//除了是全降序即i=-1不考虑
{
while (nums[j] <= nums[i])j--;
swap(nums[j], nums[i]);
}
reverse(nums.begin()+i+1,nums.end());//都要翻转
}
};