标签:style blog http color io os java ar for
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 }
标签:style blog http color io os java ar for
原文地址:http://www.cnblogs.com/hansongjiang/p/3973545.html