1. 原题链接

https://leetcode.com/problems/permutation-sequence/description/

2. 题目要求

给出整数 n和 k ,k代表从1到n的整数所有排列序列中的第k个序列,返回String类型的第k个序列

3. 解题思路

首先我们要知道这个序列是按照什么规律排列下去的,假如此时n=4,k= 21,n=4时所有的排列如下:

可以看出 n=4 时,一共有 4!=24种排列组合。

每一个数字开头各有 6 种排列组合,因此我们可以把同一数字开头的排列看作同一组,一共 4 组。

我们进一步探寻排列的规律。

(1) 第一步: 确定第一个数字

k=21,也就是要我们找到第19个排列组合,这个组合的第一个数字我们使用  (21-1)/(4-1)! = 3 ,3对应未使用数字中的第四位数字“4”,所以第一位数字为4。

将 4 从未使用数字中去除,还剩:1 2 3

解释一下为什么要 21-1:因为java进行整出运算时不会进行四舍五入,只保留整数不分。18/6 和 21/6 的结果都是3,按照每一个数字开头有 6 种排列方式,第 18和第 21 都是以 4开头。但实际上第 18 个排列以 “3” 开头,第 21 个以 “4” 开头。所以使用k-1来避免这个问题。

2)第二步:确定第二个数字

我们已经确定了第一位数字,也就是第一位数字是 4 ,第4组。从上面的排列组合可以看出,第二位存在三种数字,每一个数字都存在两次(蓝框圈出),因此第二位数字相同的又可以看成同一组。

k= 20%(4-1)! =20%6 =2, 2/(4-2)! = 2/2 =1, 1对应未使用数字中的第二位数字 “1”,因此第二位数字为2。

将2从未使用数字中去掉,还剩:1 3

(3)第三步:确定第三个数字

第三个数字只存在两种可能了,k= 2%(4-2)! =2%2 =0,0/(4-3)!= 0/1 =0,0对应未使用数字中的第一位数字 “1”,因此第三位数字为1

将1从未使用数字中去掉,还剩:3

(4)第四步:确定第四个数字

k=0%(4-4)! = 0%1 = 0,0/(4-4)!=0/1 =0 ,0对应第一位数字,此时未使用数字中的第一位数字“3”,因此第四位数字为3.

所以第 21 个排列组合为:4213

4. 代码实现

import java.util.ArrayList;
import java.util.List; public class PermutationSequence60 {
public static void main(String[] args) {
System.out.println(getPermutation(4,21));
System.out.println(19/6);
}
public static String getPermutation(int n,int k){
int pos = 0;
List<Integer> numbers = new ArrayList<>();
int[] factorial = new int[n+1];
StringBuilder sb = new StringBuilder(); int sum = 1;
factorial[0] = 1;
// 保存不同整数的阶乘
for(int i=1; i<=n; i++){
sum *= i;
factorial[i] = sum;
}
// factorial[] = {1, 1, 2, 6, 24, ... n!} // 未使用数字列表
for(int i=1; i<=n; i++){
numbers.add(i);
} k--; for(int i = 1; i <= n; i++){
System.out.println(factorial[n-i]);
int index = k/factorial[n-i];
sb.append(String.valueOf(numbers.get(index)));
numbers.remove(index);
k =k%factorial[n-i];
} return String.valueOf(sb);
}
}

  

LeetCode: 60. Permutation Sequence(Medium)的更多相关文章

  1. leetCode 60.Permutation Sequence (排列序列) 解题思路和方法

    The set [1,2,3,-,n] contains a total of n! unique permutations. By listing and labeling all of the p ...

  2. LeetCode:60. Permutation Sequence,n全排列的第k个子列

    LeetCode:60. Permutation Sequence,n全排列的第k个子列 : 题目: LeetCode:60. Permutation Sequence 描述: The set [1, ...

  3. 60. Permutation Sequence(求全排列的第k个排列)

    The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of the p ...

  4. LeetCode: 61. Rotate List(Medium)

    1. 原题链接 https://leetcode.com/problems/rotate-list/description/ 2. 题目要求 给出一个链表的第一个结点head和正整数k,然后将从右侧开 ...

  5. LeetCode:11. ContainerWithWater(Medium)

    原题链接:https://leetcode.com/problems/container-with-most-water/description/ 题目要求:给定n个非负整数a1,a2,...,an  ...

  6. [LeetCode] 60. Permutation Sequence 序列排序

    The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of the p ...

  7. Leetcode 60. Permutation Sequence

    The set [1,2,3,-,n] contains a total of n! unique permutations. By listing and labeling all of the p ...

  8. leetcode 60. Permutation Sequence(康托展开)

    描述: The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of t ...

  9. [LeetCode]60. Permutation Sequence求全排列第k个

    /* n个数有n!个排列,第k个排列,是以第(k-1)/(n-1)!个数开头的集合中第(k-1)%(n-1)!个数 */ public String getPermutation(int n, int ...

随机推荐

  1. JAVA串口开发帮助类分享-及写在马年末

    摘要: 在系统集成开发过程中,存在着各式的传输途径,其中串口经常因其安全性高获得了数据安全传输的重用,通过串口传输可以从硬件上保证数据传输的单向性,这是其它介质所不具备的物理条件.下面我就串口java ...

  2. SG函数&&SG定理

    必胜点和必败点的概念:        P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败.        N点:必胜点,处于此情况下,双方操作均正确的情况下必胜. 必胜点和必败点的 ...

  3. JAVA中日期 yyyy-MM-dd HH:mm:ss和yyyy-MM-dd hh:mm:ss的区别

    JAVA中日期 yyyy-MM-dd HH:mm:ss和yyyy-MM-dd hh:mm:ss的区别 : HH:24小时制 hh:12小时制 package time; import java.tex ...

  4. ADF系列-3.VO的查询

    一·VO的计数查询 VO的计数查询有四种方式: 1.ViewObjectImpl::getRowCount() 这个方法从数据库中提取所有行,然后对每一行计数, 得到总行数.如果行数很大,这会影响性能 ...

  5. BZOJ2301:[HAOI2011]Problem b(莫比乌斯反演,容斥)

    Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数 ...

  6. python-常用模块之os、sys

    一.os os模块包含普遍的操作系统功能: os.pardir #获取当前目录的父目录字符串名:('..') os.makedirs('dirname1/dirname2') #可生成多层递归目录 o ...

  7. 简单使用Spring Boot+JpaRepository+hibernate搭建项目

    sql: -- -------------------------------------------------------- -- 主机: 127.0.0.1 -- 服务器版本: 10.3.9-M ...

  8. ORM优缺点

    优点: 1.提高了开发效率.由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的.庞大的数据访问层. 2.ORM提供了对数据库的映射,不 ...

  9. AutoLayout对 scrollview的contentSize 和contentOffset属性的影响

      AutoLayout对 scrollview的contentSize 和contentOffset属性的影响 问题一.iOS开发中,如果在XIB文件中创建一个scrollview,同时给它设置布局 ...

  10. VS进行调试时IIS Express显示Access Define-坑爹的腾讯TGP助手

    今天在家使用VS进行调试的时候发现IIS Express死活启动不了,改用IIS也是不行,尝试了网上所说的所有办法,改了各种权限,找了各种注册表,最终未果,然后我想起之前被腾讯坑过的那次:http:/ ...