package com.interview.books.leetcodeoj; /** * Created_By: stefanie * Date: 14-12-22 * Time: 下午7:56 */ public class LOJ60_PermutationSequence { //permutation with n digits will have n! elements, based on this rule find K-th element //1. calculate factors from [0, n], factors[0] = 1; //2. for initialize: k-- and k = k % factors[n]; //3. for every offset: k -= cur * factors[n - 1] and n--; public String getPermutation(int n, int k) { int[] factors = factors(n); if(n == 0 || k <= 0) return ""; k--; k = k % factors[n]; StringBuffer buffer = new StringBuffer(); StringBuffer option = new StringBuffer("123456789"); while(n > 0){ int cur = k / factors[n - 1]; buffer.append(option.charAt(cur)); option.deleteCharAt(cur); k -= cur * factors[n - 1]; n--; } return buffer.toString(); } public int[] factors(int n){ int[] factors = new int[n + 1]; factors[0] = 1; for(int i = 1; i <= n; i++) factors[i] = factors[i - 1] * i; return factors; } }