Given n and k, return the k-th permutation sequence.
Notice
n will be between 1 and 9 inclusive.
Example
For n = 3
, all permutations are listed as follows:
"123"
"132"
"213"
"231"
"312"
"321"
If k = 4
, the fourth permutation is "231"
Challenge
O(n*k) in time complexity is easy, can you do it in O(n^2) or less?
class Solution { /** * @param n: n * @param k: the kth permutation * @return: return the k-th permutation */ public String getPermutation(int n, int k) { if(n <= 0) return ""; StringBuilder result = new StringBuilder(); ArrayList<Integer> list = new ArrayList<Integer>(); for(int i = 1; i <= n; i++) list.add(i); k--; n--; while(n >= 0){ int index = k / factor(n); result.append(list.remove(index)); k -= index * factor(n); n--; } return result.toString(); } public int factor(int n){ int result = 1; for(int i = 1; i <= n; i++) result *= i; return result; } }
时间: 2024-12-14 03:52:38