leetcode: Next Permutation

来源:互联网 发布:csgo辅助源码 编辑:程序博客网 时间:2024/05/01 11:40

stl的实现方法,先从后往前找一个相邻的第一个小于第二个的数对,然后从后往前找第一个大于上述数对第一个数字的数,交换两者,逆序数对第二个数到最后的所有数字

class Solution {public:    void nextPermutation(vector<int> &num) {        if( num.size() <= 1)            return;        int i = num.size() - 1;        while(true){            int ii = i;            --i;            if( num[i] < num[ii]){                int j = num.size();                while( !(num[i] < num[--j])){}                swap( num, i, j);                reverse( num, ii);                return;            }            if( i == 0){                reverse( num, i);                return;            }        }    }    void swap( vector< int> &num, int i, int j){        int tmp = num[i];        num[i] = num[j];        num[j] = tmp;    }    void reverse( vector< int> &num, int i){        for( int j = i, k = num.size()-1; j < k; ++j, --k){            swap( num, j, k);        }       }};



0 0
原创粉丝点击