給出集合 [1,2,3,…,n],其所有元素共有 n! 種排列。
按大小順序列出所有排列情況,并一一標記,當 n = 3 時, 所有排列如下:
“123”
“132”
“213”
“231”
“312”
“321”
給定 n 和 k,返回第 k 個排列。
說明:
給定 n 的范圍是 [1, 9]。
給定 k 的范圍是[1, n!]。
示例 1:
輸入: n = 3, k = 3
輸出: “213”
代碼
class Solution {int tar;String ress=null;public String getPermutation(int n, int k) {tar=k;permutation(n,new boolean[n+1],new StringBuilder());return ress;}public void permutation(int n, boolean[] check,StringBuilder stringBuilder) {if(ress!=null) return;if(stringBuilder.length()==n)//排列完成{if(--tar==0)//檢查是否為第k個數ress=stringBuilder.toString();}for (int i=1;i<=n;i++)//遍歷可以選擇的數字{if(check[i]) continue;check[i]=true;stringBuilder.append(i);permutation(n,check,stringBuilder);check[i]=false;//回溯stringBuilder.deleteCharAt(stringBuilder.length()-1);}}
}