首页 > 代码库 > 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个排列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。