LeetCode 60 第k個排列
阿新 • • 發佈:2020-11-13
LeetCode60 第k個排列
題目描述
給出集合 [1,2,3,...,n]
,其所有元素共有 n!
種排列。
按大小順序列出所有排列情況,並一一標記,當 n = 3
時, 所有排列如下:
"123"
"132"
"213"
"231"
"312"
"321"
給定 n
和 k
,返回第 k
個排列。
樣例
輸入:n = 3, k = 3
輸出:"213"
輸入:n = 4, k = 9
輸出:"2314"
輸入:n = 3, k = 1
輸出:"123"
演算法分析
- 列舉每個位置
- 從高位到低位依次考慮每一位;
- 對於每一位,從小到大依次列舉未使用過的數,確定當前位是幾
時間複雜度
Java程式碼
class Solution { public String getPermutation(int n, int k) { boolean[] st = new boolean[10]; int[] f = new int[10]; //存的階乘 f[0] = 1; for(int i = 1; i <= n; i++){ f[i] = f[i - 1] * i; } String ans = ""; for(int i = 0; i < n; i ++){ for(int j = 1; i <= n; j++){ if(!st[j]){ if(k <= f[n-i-1]){ ans = ans + "" + j; st[j] = true; break; } k -= f[n-i-1]; } } } return ans; } }