Next Permutation

 

void swap(int* a,int* b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}
void reverse(vector<int> &num,int i,int j)
{
    while(i<j)
        swap(&num[i++],&num[j--]);
    
}
class Solution {
public:
    void nextPermutation(vector<int> &num) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if(num.empty())
            return;
        int i,j;
        for(i=num.size()-2;i>=0;i--)
        {
            if(num[i]<num[i+1]) //逆序
            {
                j = i+1;
                while(j+1<=num.size()-1&&num[j+1]>num[i])
                    j++;
                swap(&num[i],&num[j]);
                reverse(num,i+1,num.size()-1);
                return; 
            }
        }
        reverse(num,0,num.size()-1);
    }
};

  

posted @ 2013-10-10 22:50  summer_zhou  阅读(173)  评论(0编辑  收藏  举报