Skip to content

Latest commit

 

History

History
76 lines (62 loc) · 1.4 KB

0060 第k个排列.md

File metadata and controls

76 lines (62 loc) · 1.4 KB

0060 第k个排列

Question:

给出集合 [1,2,3,…,*n*],其所有元素共有 n! 种排列。

按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:

  1. "123"
  2. "132"
  3. "213"
  4. "231"
  5. "312"
  6. "321"

给定 nk,返回第 k 个排列。

说明:

  • 给定 n 的范围是 [1, 9]。
  • 给定 k 的范围是[1, n!]。

示例 1:

输入: n = 3, k = 3
输出: "213"

示例 2:

输入: n = 4, k = 9
输出: "2314"

Solution:

class Solution {
    public String getPermutation(int n, int k) {
        LinkedList<Integer> ll=new LinkedList(){};
        int left=1;
        int factorial=1;
        while(factorial<k){
            left++;
            factorial*=left;
        }
        StringBuilder sb=new StringBuilder();
        int index=1;
        for(;index<=n-left;index++){
            sb.append(index);
        }
        for(;index<=n;index++){
            ll.add(index);
        }
        while(k!=0){
            factorial/=left;
            left--;
            int pos=k/factorial;
            k=k%factorial;
            if(k!=0)
                pos++;
            sb.append(ll.get(pos-1));
            ll.remove(pos-1);
        }
        while(left!=0){
            left--;
            sb.append(ll.get(left));
            ll.remove(left);
        }
        return sb.toString();
    }
}