首页 > 代码库 > 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 }

 

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