Advertisement
armandorf

LeetCode 60. Permutation Sequence

Nov 15th, 2018
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.51 KB | None | 0 0
  1. class Solution {
  2.     public String getPermutation(int n, int k) {
  3.         StringBuilder permutation = new StringBuilder();
  4.         Map<Integer, Integer> numsMap = updateMap(getOrderedNumsUpToN(n));
  5.        
  6.         for (int i = 0; i < n; i++) {
  7.             int nSize = n - i;
  8.             int s; // section number
  9.             int nFact = factorial(nSize);
  10.             int r = factorial(nSize - 1);
  11.  
  12.             s = (int) Math.ceil((float) k / r);
  13.             permutation.append(numsMap.get(s));
  14.            
  15.             numsMap.remove(s);
  16.             List<Integer> values = new ArrayList<Integer>(numsMap.values());
  17.             Collections.sort(values);
  18.             numsMap = updateMap(values);
  19.            
  20.             k = k - (s - 1) * r;
  21.         }
  22.        
  23.         return permutation.toString();
  24.     }
  25.  
  26.     public int factorial(int number) {
  27.         int result = 1;
  28.         for (int factor = 2; factor <= number; factor++) {
  29.             result *= factor;
  30.         }
  31.         return result;
  32.     }
  33.    
  34.     public List<Integer> getOrderedNumsUpToN(int n) {
  35.         List<Integer> nums = new ArrayList<Integer>();
  36.         for (int i = 1; i <= n; i++) {
  37.             nums.add(i);
  38.         }
  39.         return nums;
  40.     }
  41.  
  42.     public static Map<Integer, Integer> updateMap(List<Integer> values) {
  43.         Map<Integer, Integer> numsMap = new HashMap<Integer, Integer>();
  44.         for (int i = 1; i <= values.size(); i++) {
  45.             numsMap.put(i, values.get(i - 1));
  46.         }
  47.         return numsMap;
  48.     }
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement