给出集合 [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);}}
}