首页 > 其他 > 详细

60. Permutation Sequence

时间:2018-07-18 19:40:17      阅读:148      评论:0      收藏:0      [点我收藏+]
 1 class Solution 
 2 {
 3 public:
 4     string res;
 5     vector<int> fact={1,1,2,6,24,120,720,5040,40320,362880};
 6     string getPermutation(int n, int k) 
 7     {
 8         string num;
 9         char dd=n+0;
10         for(char c=1;c<=dd;c++)
11             num.push_back(c);
12         com(num,k,n);
13         return res;
14     }
15     
16     void com(string &num,int &k,int &n)
17     {
18         if(k==fact[n])
19         {
20             reverse(num.begin(),num.end());
21             res=res+num;
22             return;
23         }
24         if(n==1)
25         {
26             res.push_back(num[0]);
27             return;
28         }
29         int f=fact[n-1];
30         n--;
31         int cur=k/f;
32         k=k%f;
33         if(k==0)
34         {
35             res.push_back(num[cur-1]);
36             auto p=num.begin()+(cur-1);
37             num.erase(p);
38             reverse(num.begin(),num.end());
39             res=res+num;
40             return;
41         }
42         else if(k==1)
43         {
44             res.push_back(num[cur]);
45             auto p=num.begin()+cur;
46             num.erase(p);
47             res=res+num;
48             return;
49         }
50         else
51         {
52             res.push_back(num[cur]);
53             auto p=num.begin()+cur;
54             num.erase(p);
55             com(num,k,n);
56         }
57     }
58 };

用的数学方法,把数字排起来,用序列k去除以n-1的阶乘,取结果为下标,在排列好的字符串里面去取数字,同时判定是否可以直接完结程序。

60. Permutation Sequence

原文:https://www.cnblogs.com/zhuangbijingdeboke/p/9330977.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!