LeetCode Permutation Sequence(求排列中的第k个排列是什么)
2016-07-25 20:04
423 查看
思路:使用阶乘,f(n) = f(n -1) * n,在确定第i个数是,用k/f(n - 1 - i)
代码如下:
public class Solution
{
public String getPermutation(int n, int k) {
int[] fac = new int[n + 1];
fac[0] = 1;
for (int i = 1; i <= n; i++) {
fac[i] = fac[i - 1] * i;
}
List<Integer> num = new ArrayList<>();
StringBuilder sb = new StringBuilder();
for (int i = 1; i<= n; i++) num.add(i);
k--;
for (int i = 1; i <= n; i++) {
int index = k / fac[n - i];
sb.append(String.valueOf(num.get(index)));
num.remove(index);
k -= index * fac[n - i];
}
return sb.toString();
}
}
代码如下:
public class Solution
{
public String getPermutation(int n, int k) {
int[] fac = new int[n + 1];
fac[0] = 1;
for (int i = 1; i <= n; i++) {
fac[i] = fac[i - 1] * i;
}
List<Integer> num = new ArrayList<>();
StringBuilder sb = new StringBuilder();
for (int i = 1; i<= n; i++) num.add(i);
k--;
for (int i = 1; i <= n; i++) {
int index = k / fac[n - i];
sb.append(String.valueOf(num.get(index)));
num.remove(index);
k -= index * fac[n - i];
}
return sb.toString();
}
}
相关文章推荐
- 1085. Perfect Sequence (25)
- UINavigationBar 透明颜色后下方还有一个1像素的黑线
- easyui combo选中事件
- hdu 3530 Subsequence
- hdu-5749 Colmerauer(单调栈)
- LeetCode:357. Count Numbers with Unique Digits
- RequestDispatcher的forward方法
- codreforces C. Replace To Make Regular Bracket Sequence(栈)
- CodeForces 288A Polo the Penguin and Strings
- Java多线程之BlockingQueue深入分析
- Android MVPBuilder第一篇
- CodeForces 612C Replace To Make Regular Bracket Sequence (栈)
- 草蛋的Android studio 居然让我搞了好几天 真是智障啊non-zero exit value 2
- 自定义控件的使用流程
- 线性回顾-generalize issue
- IOS UITextView 首行缩进
- 浅谈 qmake 之 shadow build(将源码路径和构建路径分开,一套源码要分别用msvc2008、msvc2008、mingw分别编译又不互相干扰)
- 遍历Map并通过value获取相应key值
- UITextField代理事件
- require和require-dev的区别