LeetCode-------60. Permutation Sequence(n的全排列中第K列)
2016-11-08 11:31
423 查看
The set
unique permutations.
By listing and labeling all of the permutations in order,
We get the following sequence (ie, for n = 3):
Given n and k, return the kth permutation sequence.
Note: Given n will be between 1 and 9 inclusive.
Subscribe to see which companies asked this question
思路一:求出全排列,回溯法;然后找出第k个(算法复杂度过高-----N!)
思路二:数学解析
已知n的值,学过排列组合知道共有n!种排列。
第一位每个数字开头的序列都有(n-1)!个序列,因此n个数字所以共有n!个序列。
以此类推,第二位每一个数开头都有(n-2)!个序列。
因为数字不能重复,我用sign记录数字是否使用过,data存阶层的值。
每次循环找到没使用过的数中第k/data[i]个数就是当前位的数字。
设变量K1 = K
a1 = K1 / (n-1)!// 第一位的选择下标
同理,a2的值可以推导为
K2 = K1 % (n-1)!
a2 = K2 / (n-2)!
。。。。。
K(n-1) = K(n-2) /2!
a(n-1) = K(n-1) / 1!
an = K(n-1)
[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.
Subscribe to see which companies asked this question
思路一:求出全排列,回溯法;然后找出第k个(算法复杂度过高-----N!)
思路二:数学解析
已知n的值,学过排列组合知道共有n!种排列。
第一位每个数字开头的序列都有(n-1)!个序列,因此n个数字所以共有n!个序列。
以此类推,第二位每一个数开头都有(n-2)!个序列。
因为数字不能重复,我用sign记录数字是否使用过,data存阶层的值。
每次循环找到没使用过的数中第k/data[i]个数就是当前位的数字。
设变量K1 = K
a1 = K1 / (n-1)!// 第一位的选择下标
同理,a2的值可以推导为
K2 = K1 % (n-1)!
a2 = K2 / (n-2)!
。。。。。
K(n-1) = K(n-2) /2!
a(n-1) = K(n-1) / 1!
an = K(n-1)
public class Solution { public String getPermutation(int n, int k) { StringBuilder sb = new StringBuilder(); boolean[] used = new boolean ; k = k - 1; int factor = 1; for (int i = 1; i < n; i++) { factor *= i; } for (int i = 0; i < n; i++) { int index = k / factor; k = k % factor; for (int j = 0; j < n; j++) { if (used[j] == false) { if (index == 0) { used[j] = true; sb.append((char) ('0' + j + 1)); break; } else { index--; } } } if (i < n - 1) { factor = factor / (n - 1 - i); } } return sb.toString(); } }
相关文章推荐
- LeetCode 60. Permutation Sequence 全排列的第k个
- leetcode 60. Permutation Sequence
- [LeetCode]76. Permutation Sequence全排列序列
- LeetCode||60. Permutation Sequence
- Leetcode 60. Permutation Sequence (Medium) (cpp)
- 【一天一道LeetCode】#60. Permutation Sequence.
- [LeetCode] 60. Permutation Sequence
- leetcode 60. Permutation Sequence
- 【一天一道LeetCode】#60. Permutation Sequence.
- LeetCode *** 60. Permutation Sequence
- [Leetcode] 60. Permutation Sequence 解题报告
- 【LeetCode】60. Permutation Sequence
- 2018.1.13 LeetCode 47. Permutations II 60. Permutation Sequence 【STL简单应用】
- LeetCode 60. Permutation Sequence(排列序列)
- leetcode60. Permutation Sequence
- [Leetcode] 60. Permutation Sequence
- LeetCode 60. Permutation Sequence
- LEETCODE 60. Permutation Sequence
- leetcode: 60. Permutation Sequence
- [Leetcode] 60. Permutation Sequence