permuation sequence 超时# JobHunting - 待字闺中q*m2014-02-15 08:021 楼我先写的那个 next permutation, 然后call 它 k次, 结果超时。有什么好的方法吗?谢谢
l*a2014-02-15 08:022 楼那说明你的next permutation没写好我就这么做的,没超时【在 q****m 的大作中提到】: 我先写的那个 next permutation, 然后call 它 k次, 结果超时。: 有什么好的方法吗?: 谢谢
q*m2014-02-15 08:023 楼能把你的贴一下吗? 这是我的code.class Solution {public:void nextPermutation(vector &num) {int i = num.size() - 1;while(i >= 1 && num[i - 1] >= num[i]){--i;}if(i == 0){int l = 0, r = num.size() -1 ;while(l <= r){swap(num[l], num[r]);++l;--r;}return;}int left = i, right = num.size() - 1, target = num[i - 1];while(left < right){int mid = (left + right) / 2;if(num[mid] > target){left = mid + 1;}else{right = mid;}}int tmp = left;if(num[tmp] <= target){tmp = left - 1;}swap(num[i - 1], num[tmp]);left = i, right = num.size() - 1;while(left <= right){swap(num[left], num[right]);++left;--right;}}string getPermutation(int n, int k) {vectorv(n, 0);for(int i = 1; i <= n; ++i){v[i - 1] = i;}for(int i = 2; i <= k; ++i){nextPermutation(v);}string s;for(int i = 0; i < n; ++i){s.append(1, v[i] + '0');}return s;}};【在 l*****a 的大作中提到】: 那说明你的next permutation没写好: 我就这么做的,没超时
l*a2014-02-15 08:024 楼经典算法,查得到吧扫了一眼,你中间插了一段两分,是想干吗【在 q****m 的大作中提到】: 能把你的贴一下吗? 这是我的code.: class Solution {: public:: void nextPermutation(vector &num) {: int i = num.size() - 1;: : while(i >= 1 && num[i - 1] >= num[i]): {: --i;: }