标签:大于 str bre tps href swap eve amp etc
1. Next Permutation
实现C++的std::next_permutation函数,重新排列范围内的元素,返回按照 字典序 排列的下一个值较大的组合。若其已经是最大排列,则返回最小排列,即按升序重新排列元素。不能分配额外的内存空间。
void nextPermutation(vector<int>& nums) { next_permutation(nums.begin(), nums.end()); }
全排列 Permutation 问题已经被古人研究透了,参见 Wikipedia page,Next Permutation 有一个经典的简单有效算法,还能解决含有重复元素的全排列问题。
e.g.
nums = [6, 3, 4, 9, 8, 7, 1] i j
C++实现:
1 void nextPermutation(vector<int>& nums) { 2 int j = nums.size() - 1, i = j; 3 while (--i >= 0) { 4 if (nums[i] < nums[i + 1]) 5 break; 6 } 7 if (i != -1) { 8 while (j > i) { 9 if (nums[j] > nums[i]) 10 break; 11 j--; 12 } 13 swap(nums[i], nums[j]); 14 } 15 reverse(nums.begin() + i + 1, nums.end()); 16 return; 17 }
标签:大于 str bre tps href swap eve amp etc
原文地址:http://www.cnblogs.com/wayne793377164/p/7161786.html