31.[LeetCode] Next Permutation下一个排列

版权声明:只要梦想一天,只要梦想存在一天,就可以改变自己的处境。 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());//都要翻转
	}
};

[1]https://www.cnblogs.com/grandyang/p/4428207.html

猜你喜欢

转载自blog.csdn.net/dongyanwen6036/article/details/85370094