Link: https://oj.leetcode.com/problems/permutation-sequence/
The set [1,2,3,…,n] contains a total of n! unique permutations.
By listing and labeling all of the permutations in order,
We get the following sequence (ie, for n = 3):
- "123"
- "132"
- "213"
- "231"
- "312"
- "321"
Given n and k, return the kth permutation sequence.
Note: Given n will be between 1 and 9 inclusive.
这题完全没有思路。再做。
以下代码参考:http://www.lifeincode.net/programming/leetcode-permutation-sequence-java/
Time: O(n),
But this blog said its O(n^2) because removing elements from array is O(n) //What if removing an element from an ArrayList?
- ArrayList 对于随机位置的add/remove,时间复杂度为 O(n),但是对于列表末尾的添加/删除操作,时间复杂度是 O(1). (Ref: http://blog.csdn.net/renfufei/article/details/17077425)
http://blog.csdn.net/linhuanmars/article/details/22028697
public class Solution {
public String getPermutation(int n, int k) {
int t = 1;
ArrayList<Integer> num = new ArrayList<Integer> ();
for(int i = 1; i <=n; i++){
t *= i;
num.add(i);//num = {1, 2, 3}
}
//t = n!
k--;//from 1-indexed to 0-indexed
t /=n;//t = (n-1)!
StringBuffer sb = new StringBuffer();
for(int i = n-1; i >=1; i--){//i starts with n-1 because t = (n-1)!, need to divide (n-1)
int p = k/t;
int digit = num.get(p);
sb.append(String.valueOf(digit));//note to use "String.valueOf"!
num.remove(p);
k %= t;
t /=i;
}
sb.append(String.valueOf(num.get(0)));
return sb.toString();
}
}