第k个排列 转自:天天一道LeetCode-----找到第k个排列

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

按大小顺序列出全部排列状况,并一一标记,当 n = 3 时, 全部排列以下:ui

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

给定 n 和 k,返回第 k 个排列。spa

说明:.net

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

示例 1:code

输入: n = 3, k = 3
输出: "213"
复制代码

示例 2:blog

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


class Solution {
    public String getPermutation(int n, int k) {
        int[] f = new int[ n + 1 ];
        f[ 0 ] = 1;
        List< Integer > list = new ArrayList<>();
        for(  int i = 1; i<= n ; i++ ){
          f[ i ] = i * f[ i - 1 ];
          list.add( i );
        }
        StringBuilder sb = new StringBuilder();
        for( int i = 1; i <= n ; i++ ){
            int index = k / f[ n - i ] ; 
            if( k % f[ n - i ] != 0 ){
                index++;
            }
            sb.append( list.get( index - 1 ) + "");
            list.remove( index - 1 );
            k = k - (index - 1 ) * f[ n - i ];
        }
        return sb.toString();
    }
}
复制代码

解题: 转载自 blog.csdn.net/sinat_35261…rem

相关文章
相关标签/搜索