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

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 }

 

你可能感兴趣的:(列)