标签:
不懂为什么这么做
在当前序列中,从尾端向前寻找两个相邻元素,前一个记为*i,后一个记为*t,并且满足*i < *t。然后再从尾端
寻找另一个元素*j,如果满足*i < *j,即将第i个元素与第j个元素对调,并将第t个元素之后(包括t)的所有元
素颠倒排序,即求出下一个序列了。
STL中有这个next_permutation函数
1 class Solution { 2 public: 3 void nextPermutation(vector<int>& nums) { 4 if(nums.size()<2) return; 5 int i,k; 6 for(i= nums.size()-2;i>=0;--i) 7 if(nums[i]<nums[i+1]) 8 break; 9 for(k=nums.size()-1;k>i;--k) 10 if(nums[i]<nums[k]) 11 break; 12 if(i>=0) swap(nums[i],nums[k]); 13 reverse(nums.begin()+i+1,nums.end()); 14 } 15 };
标签:
原文地址:http://www.cnblogs.com/daocaorenblog/p/5266655.html