2015美团网 哈工大 第k个排列

 

leetcode 上的Permutation Sequence 下面是可执行代码

 1 2 3   

 1 3 2

2 1 3

2 3 1

3 1 2

3 2 1

以1 开头 123,132,共2!个数

2 开头  213,231

3开头  312, 321

如果给你弟k个,能求出它位于以谁开头不?只要求出它位于第几个2!个,总体思路就是这个

 

 

 2 
 3 import java.util.ArrayList;
 4 
 5 public class Main {
 6     //求N的阶乘
 7     public static int fic(int n)
 8     {
 9         int res=1;
10         for(int i=1;i<=n;i++)
11         {
12             res=res*i;
13         }
14         return res;
15     }
16         
17     
18     public static String getPermutation(int n, int k) {
19         int r=fic(n);
20         if(k>r) return null;
21         ArrayList<Integer> arr=new ArrayList<Integer>();
22         for(int i=1;i<=n;i++)
23         {
24             arr.add(i);
25         }
26         
27          //形成 1,2,3,4,5,6,7 的列表
28         //
29         
30         
31         k--;
32         
33        StringBuffer sbf=new StringBuffer();
34         for(int i=n;i>=1;i--) //因为排列共有n个,所以我们不断从链表中删除一个,加入string中,最后一个直接加在最后面
35         {
36             r=r/i;  
37             int t=k/r;//选择删除的位置
38             sbf.append(arr.remove(t));
39             k=k%r;
40             
41             
42             
43        
44         }
45        
46         return sbf.toString();
47         
48     }
49     public static void main(String args[])
50     {
51         
52             System.out.println(getPermutation(2, 2));
53         
54         
55         
56     }
57 }

 

posted @ 2014-09-15 20:06  hansongjiang8  阅读(163)  评论(0编辑  收藏  举报