第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

相關文章
相關標籤/搜索