LeetCode OJ算法题(五十九):Permutation Sequence
来源:互联网 发布:excel 数据连接 编辑:程序博客网 时间:2024/06/03 19:05
题目:
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.
解法:要求生成第k个排列,第一感觉是使用next Permutation的方法,调用k次,但是这样感觉开销太大,应该可以直接通过k和n算出结果的。
观察第一位的数字,如果k<(n-1)!那么该位肯定是1,如果k在n-1的阶乘和2倍的n-1的阶乘之间,那么该位为2,以此类推,因此可以用(k-1)/(n-1)!来判断第一位是多少,然后递归产生第二位,第三位。。。但是注意元素只能使用一次,因此我用了HashSet来保存使用过的数字。
import java.util.HashSet;public class No59_PermutationSequence {public static void main(String[] args){System.out.println(getPermutation(3, 1));}public static String getPermutation(int n, int k) { if(k > factorial(n)) return ""; HashSet<Integer> set = new HashSet<Integer>(); return getP(n, k, set); }public static String getP(int n, int k, HashSet<Integer> set){if(n == 1){int r = 1;while(set.contains(r))r++;return ""+r;} int tmp = factorial(n-1);int first = 0;int i = 0;do{first++;while(set.contains(first)) first++;i++;}while(i <= (k-1)/tmp);set.add(first);return ""+first+getP(n-1, k%tmp==0?tmp:k%tmp, set);}public static int factorial(int n){if(n==0 || n==1) return 1;return factorial(n-1) * n;}}
0 0
- LeetCode OJ算法题(五十九):Permutation Sequence
- LeetCode OJ:Permutation Sequence
- LeetCode OJ - Permutation Sequence
- LeetCode OJ Permutation Sequence
- LeetCode OJ 之 Permutation Sequence (排列组合)
- <LeetCode OJ> 60. Permutation Sequence
- LeetCode OJ算法题(三十):Next Permutation
- LeetCode OJ算法题(四十六):Permutation II
- LeetCode(60) Permutation Sequence
- Leetcode算法学习日志-60 Permutation Sequence
- [leetcode 刷题系列]Permutation Sequence
- LeetCode刷题笔录Permutation Sequence
- LeetCode第60题之Permutation Sequence
- LeetCode 60. Permutation Sequence(排列序列)
- LeetCode进阶之路(Permutation Sequence)
- leetcode:数学:Permutation Sequence(060)
- LeetCode刷题(35)--Permutation Sequence
- LeetCode: Permutation Sequence
- C++中数字之间循环技巧
- Ajax实现异步验证和访问
- HDU1028关于母函数以及递推
- OC 成员变量和属性的区别 .
- Mac OS X 安装和配置 PAServer,调试Firemonkey程序
- LeetCode OJ算法题(五十九):Permutation Sequence
- ios--UITabBarController的基本用法3
- c#程序以管理员身份运行(三种办法)
- hdu 1565 方格取数(1)
- Qt构建及编译出错问题及解决方案
- Why my APNs push certificate did not work?
- 嵌入式 tasklet使用workqueue示例
- 一个可以自动生成静态库,自动安装程序的Makefile
- gcc常用命令