LeetCode 30. Next Permutation

为找到次大的数,我们尽量保证高位不变,即从十位数起,每次迭代只考察一个数位上的数:

假设现为第i次迭代,num[i],那么从最低位起,考察它右边的的那些数位j;

若第j位的数num[j] 大于 num[i], 交换他们,然后将低于i的那些位数排升序 -- sort(num.begin()+i+1, num.end()), 结束程序。


代码:

class Solution 
{
public:
    void nextPermutation(vector<int> &num) 
    {
		for (int i = num.size()-2; i >= 0; -- i)
		{
			for (int j = num.size()-1; j > i; -- j)
			{
				if (num[j] > num[i])
				{
					int tmp = num[j];
					num[j] = num[i];
					num[i] = tmp;
					sort(num.begin()+i+1, num.end()); 
					return ;
				}
			}
		}
		sort(num.begin(), num.end());
    }
};


你可能感兴趣的:(LeetCode,C++)