public String getPermutation(int n, int k) { //itemlist 为原始顺序数列 List<Integer> itemList = new ArrayList<>(); if(n==1){ return "1"; } //阶乘数据 List<Integer> nList = new ArrayList<>(); nList.add(1); for(int i=1;i<=n;i++){ itemList.add(i); if(i>=2){ //计算阶乘值 N! = n* (N-1)! int nData = nList.get(i-2); nList.add(i*nData); } } if(k > nList.get(nList.size()-1)){ return ""; } int index = n-1; k = k-1; StringBuilder itemStr = new StringBuilder(); while(index>=0){ if(index ==0){ itemStr.append(itemList.get(0)); break; } //获取N-1的阶乘值 int result = nList.get(index-1); //获得当前熏循环的第一个数字的索引 int firstIndex = k/result; //获取当前第一个数字 int firstNum = itemList.get(firstIndex); itemStr.append(firstNum); itemList.remove(firstIndex); index = index -1; k = k%result; } return itemStr.toString(); }
——2020.7.10