LeetCode 060 Permutation Sequence
来源:互联网 发布:steam 在mac上打不开 编辑:程序博客网 时间:2024/05/22 10:31
题目描述
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.
分析
首先想到的是递归,按照顺序寻找字符串,然后计数,计算到第k个就是所求字符串。但是这样太慢,在n=9,k很大时会超时。
然后根据规律来,我们发现当n=3时排列是3! = 6组,其中以“1”,“2”,“3”开头的分别有2组。
以“1”开头的排列中,第2位是“2”、“3”的分别有1组。
如果n=4呢?会发现以1开头的排列有6组,其中以2为第2位的排列有2组。
总结规律:第一位数字在数组中的序号肯定是:
第二位数字在剩余数组中的序号肯定是:
以此类推。
代码
public static String getPermutation(int n, int k) { if (n <= 0 || k <= 0) { return ""; } String result = ""; List<Integer> list = new ArrayList<Integer>(); int fact = 1; for (int i = 1; i <= n; i++) { list.add(i); fact *= i; } k--; for (int i = 0; i < n; i++) { fact /= (n - i); int index = k / fact; result += list.get(index); list.remove(index); k %= fact; } return result; }
代码 超时
int kth; int count; String result; public String getPermutation(int n, int k) { if (n <= 0 || k <= 0) { return ""; } kth = k; count = 0; dfs("", n); return result; } void dfs(String s, int n) { if (s.length() == n) { if (++count == kth) { result = s; } return; } if (count > kth) { return; } for (int i = 1; i <= n; i++) { if (!s.contains(i + "")) { dfs(s + i, n); } } }
0 0
- LeetCode 060 Permutation Sequence
- LeetCode 060 Permutation Sequence
- LeetCode 060 Permutation Sequence
- leetcode 060 —— Permutation Sequence
- leetcode:数学:Permutation Sequence(060)
- leetcode解题方案--060--Permutation Sequence
- LeetCode: Permutation Sequence
- LeetCode Permutation Sequence
- [Leetcode] Permutation Sequence
- [LeetCode] Permutation Sequence
- leetcode 74: Permutation Sequence
- leetcode Permutation Sequence
- [leetcode] Permutation Sequence
- [LeetCode]Permutation Sequence
- LeetCode:Permutation Sequence
- LeetCode-Permutation SequencePermutation Sequence
- [leetcode] Permutation Sequence
- LeetCode - Permutation Sequence
- ffmpeg叠加srt字幕
- 架构的那些事1--分层框架
- jaxb中的类继承
- KNN的一些总结
- 架构的那些事2--安卓的奋进
- LeetCode 060 Permutation Sequence
- 一些想法
- Android学习手记(3) Activity间传递数据
- 关于软件盘和主界面之间的问题。
- 实现m*n型数列相加(重载运算符)
- 顺序表之迷宫问题(C实现)
- Checklists学习日志之再看prepareForSegue方法的使用
- Android学习手记(4) BroadcastReceiver监听电池信息
- 特征值与特征向量的几何物理意义