LeetCode - Permutation Sequence
来源:互联网 发布:黑米软件怎么样 编辑:程序博客网 时间:2024/06/04 19:59
这道题思路并不难,就是n个数有n!中排列,那么每一位都可以通过k对剩余位数的阶乘取余来获得。
在k--那个地方调试了好久。。。。
public String getPermutation(int n, int k) { if(n<=0) return ""; if(n==1) return "1"; k--; int fac = 1; int i = n-1; while(i>1){ fac*=i; i--; } ArrayList<Integer> num = new ArrayList<Integer>(); for(i=1; i<=n; i++){ num.add(i); } StringBuilder rst = new StringBuilder(); i=n-1; while(i>=0){ int index = k/fac; rst.append(num.get(index)); num.remove(index); k = k%fac; if(i!=0) fac /= i; i--; } return rst.toString(); }
因为每一轮要remove一个数,在array里面remove一个数是O(n),所以总的时间是O(n^2)
在k--那个地方想了好久,应该是 (k-1)/fac 还是 k/fac-1呢。。。
这个问题是:每个set包含n个数,set下标从0开始,那么第k个数在第几个set呢?
set 0 : n个数
set 1 : n个数
。。。。。
对于 k = x * n(x为整数)来说,其实应该在x-1组里面,而对于 k = x*n+b (b<n)来说,应该在第x组里面,但这两个k值除以n都为x,所以不对。
而k--就解决了这个问题。
0 0
- 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
- LeetCode:Permutation Sequence
- LeetCode 60: Permutation Sequence
- Leetcode: Permutation Sequence
- leetcode Permutation Sequence
- LeetCode | Permutation Sequence
- LeetCode Permutation Sequence
- 浅谈MySQL备份字符集的问题
- 项目管理
- Sicily 周赛 Opening Ceremony
- (7)设计模式:bridge
- C++虚析构函数
- LeetCode - Permutation Sequence
- 线程池服务端设计
- C++中的vector使用范例
- openfire 搭建数据库的配置问题
- Sicily周赛 Clock Pictures
- vector是一个十分有用的容器
- Twisted: 用 getPage 完成 POST 操作
- python3嵌入mysql实现简易交互界面
- 数据存储之ORMlite框架总结