leetcode——60.第K個排列
阿新 • • 發佈:2020-07-10
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