Next Permutation

难度:2

这题很容易想到解法,不过写代码的时候犯了几个致命的错误,看来1A的能力还是很弱

题意:

求字典序的下一个排列

比如以下序列

1 2 4 5

1 2 5 4

1 4 2 5

1 4 5 2

1 5 2 4

1 5 4 2

解法:

很容易想到从尾至头找到第一个i使得num[i-1]<num[i]

表示需要从num[i],,,num[n-1]中找最小的一个大于num[i-1]的数来替换num[i-1],并把i...n-1重新排序


class Solution
{
public:
    void nextPermutation(vector<int> &num)
    {
        int len=num.size();
        int flag_i=-1;
        for(int i=len-1;i-1>=0;i--)
        {
            if(num[i] > num[i-1])
            {
                flag_i=i-1;
                break;
            }
        }
        if(flag_i == -1)
        {
            sort(num.begin(),num.end());
            return;
        }
        int min_i=-1;
        for(int i=flag_i+1;i<len;i++)
        {
            if(num[i]>num[flag_i]&&(min_i == -1||num[i]<num[min_i]))
            {
                min_i=i;
            }
        }
        swap(num[min_i],num[flag_i]);
        sort(num.begin()+flag_i+1,num.end());
    }
};


你可能感兴趣的:(Next Permutation)