第k个排列

Posted 一行代码的事

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第k个排列相关的知识,希望对你有一定的参考价值。

给定 n 和 k,求123..n组成的排列中的第 k 个排列。

 注意事项

1 ≤ n ≤ 9

样例

对于 n = 3, 所有的排列如下:

123
132
213
231
312
321

如果 k = 4, 第4个排列为,231.

 1 public class PaiLieK
 2 {
 3     public String getPermutation(int n, int k)
 4     {
 5         List<Integer> list = new ArrayList<>();
 6         List<Integer> list1 = new ArrayList<>();
 7         for(int i = 1; i <= n; i++)
 8         {
 9             list.add(i);
10         }
11 
12         boolean has = true;
13         first:
14         for(int i = 0; i < Math.pow(10,n);i++)
15         {
16             for(int j = 0; j < list.size(); j++)
17             {
18                 if(!(i+"").contains(list.get(j)+""))
19                 {
20                     has = false;
21                     continue ;
22                 }
23             }
24             if(has&&list.size() == getDigits(i))
25             {
26                 list1.add(i);
27             }
28             has = true;
29         }
30         Integer integer=list1.get(k-1);
31         return String.valueOf(integer);
32     }
33 
34 
35     public int getDigits(int i)
36     {
37         int count = 0;
38         while(i >0)
39         {
40             count++;
41             i /=10;
42         }
43         return count;
44     }
45     @Test
46     public void testGetDigits()
47     {
48         System.out.println(getDigits(198));
49         getDigits(198);
50     }
51     @Test
52     public void testGetPermutation()
53     {
54         String permutation = getPermutation(3, 4);
55         System.out.println(permutation);
56     }
57 
58 }

 

以上是关于第k个排列的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 60.第k个排列

60. 第k个排列

leetcode-第k个排列(Java和c++版)

leetcode 每日一题 60. 第k个排列

leetcode 每日一题 60. 第k个排列

[leetcode] 60. 第k个排列