码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode排列,求第k个排列

时间:2014-07-13 23:06:42      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   os   

stl 中的下一个排列在写一遍忘了

写个1个多小时,使用递归写的,错误就在我使用一个list保存当前剩下的数,然后利用k/(n-1)!的阶乘就是删除的数字,但进过观察,

比如 list={1,2,3}

分成3组:

1  {2,3}

2 {1,3}

3 {1,2}

确定位于哪个组,然后确定位于哪个组的第几个nyoj 511。

求第3个排列   ,3%2=1,删除 list就是第3个数3,其实呢是第2个树2 ,所以   计算方法为 (k-1)/(n-1)!

另外一个对于下一组,k%(n-1)!也不行啊,   第4个, 4%2!=0,其实应该为第二2.

这个思路和nyoj的小球下落很像(nyoj 511)

bubuko.com,布布扣
 1 public class Solution {
 2     
 3     private String ans="";
 4     public int calu(int n)
 5     {
 6         if(n==0) return 1;
 7         int sum=1;
 8         for(int i=2;i<=n;i++)
 9         {
10             sum*=i;
11         }
12         return sum;
13     }
14     
15     public String getPermutation(int n, int k) {
16         ArrayList<Integer> arry=new ArrayList<Integer>();
17         for(int i=1;i<=n;i++)
18         {
19             arry.add(i);
20         }
21         
22         get(k,calu(n-1),arry);
23         return ans;
24         
25     }
26     public void get(int k,int n1,ArrayList<Integer> list)
27     {
28         if(list.size()==1)
29         {
30             ans+=list.remove(0);
31             return;
32         }
33            int a=list.remove((k-1)/n1);
34            ans+=a;
35            int te=k%n1;
36            if(te==0) te=n1;
37         get(te,n1/list.size(),list);
38         
39         
40     }
41 }
View Code

 

leetcode排列,求第k个排列,布布扣,bubuko.com

leetcode排列,求第k个排列

标签:style   blog   http   color   使用   os   

原文地址:http://www.cnblogs.com/hansongjiang/p/3840492.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!