LeetCode060 Permutation Sequence
来源:互联网 发布:淘宝详情页文案价格 编辑:程序博客网 时间:2024/06/04 18:53
详细见:leetcode.com/problems/permutation-sequence
Java Solution: github
package leetcode;import java.util.Vector;public class P060_PermutationSequence {public static void main(String[] args) {Solution s = new Solution();for (int i = 1; i != 25; i ++)System.out.println(i + "..."+s.getPermutation(4, i));//tools.Utils.printArray(s.cs, 10);//tools.Utils.printArray(s.jiecheng, 10);}/* *2 ms *73.96% */static class Solution {int[] jiecheng = null;int[] cs = null; public String getPermutation(int n, int k) { if (n < 1) return ""; k --; generateJiecheng(n); cs = new int[n]; for (int i = 0; i != n; i ++) { cs[i] = k / jiecheng[n - 1- i]; k = k % jiecheng[n - 1- i]; } Vector<Integer> v = new Vector<Integer>(n); for (int i = 0; i != n; i ++) v.add(i); char[] temp = new char[n];; for (int i = 0; i != n; i ++) { temp[i] = (char)('1' + v.get(cs[i])); v.remove(cs[i]); } return new String(temp); } void generateJiecheng(int n) { jiecheng = new int[n]; jiecheng[0] = 1; for (int i = 1; i != n; i ++) jiecheng[i] = i * jiecheng[i - 1]; }}/* * 让代码更加简洁 * 计算逻辑没有任何改变 * 少用了一个长度为N的数组 * 但是更慢了。。。。 * 3 ms * 26.31% */static class Solution2 {int[] jiecheng = null;char[] cs = null; public String getPermutation(int n, int k) { if (n < 1) return ""; k --; generateJiecheng(n); cs = new char[n]; Vector<Integer> v = new Vector<Integer>(n); for (int i = 0; i != n; i ++) v.add(i); for (int i = 0; i != n; i ++) { int v_index = k / jiecheng[n - 1- i]; cs[i] = (char)('1' + v.get(v_index)); k = k % jiecheng[n - 1- i]; v.remove(v_index); } return new String(cs); } void generateJiecheng(int n) { jiecheng = new int[n]; jiecheng[0] = 1; for (int i = 1; i != n; i ++) jiecheng[i] = i * jiecheng[i - 1]; }}}
C Solution: github
/* url: leetcode.com/problems/permutation-sequence/ AC 3ms 54.55%*/#include <stdio.h>#include <stdlib.h>char* getPermutation(int n, int k) { char* ans = (char*) malloc(sizeof(char) * (n+1)); int* h = (int*) malloc(sizeof(int) * n); int* m = (int*) malloc(sizeof(int) * n); int ai = 0, ni = 0; int i = 0, v = 1, cnt = 0, mi = 0; k --; for (i = 0; i < n; i ++) m[i] = 0; for (i = n-1; i > -1; i --) { h[i] = v; v *= (n - i); } for (ni = 0; ni < n-1; ni ++) { cnt = k / h[ni]; mi = 0; while (cnt > 0) { while (m[mi] == 1) mi ++; mi ++; cnt --; } while (m[mi] == 1) mi ++; ans[ni] = (char) ('1' + mi); m[mi] = 1; k = k % h[ni]; } for (i = 0; i < n; i ++) if (m[i] == 0) { ans[n-1] = (char)('1' + i); } ans[n] = '\0'; free(h); free(m); return ans;}int main() { int n = 6; int k = 1;char* ans = NULL; for (k = 1; k <= 6*5*4*3*2; k ++) { char* ans = getPermutation(n, k); printf("k is %d answer is %s\r\n", k, ans); free(ans); } return 0;}
Python Solution: github
#coding=utf-8''' url: leetcode.com/problems/permutation-sequence @author: zxwtry @email: zxwtry@qq.com @date: 2017年4月12日 @details: Solution: 75ms 10.83%'''class Solution(object): def getPermutation(self, n, k): """ :type n: int :type k: int :rtype: str """ q, m, ti, a, k = [1]*n, [False]*n, 0, [""]*n, k-1 for i in range(n-2, -1, -1): q[i] = q[i+1] * (n-1-i) for i in range(n-1): t, ti = k // q[i], 0 while t > 0: ti += 1 if m[ti-1]:continue t -= 1 k -= q[i] while m[ti]: ti += 1 m[ti] = True a[i] = str(ti+1) ti = 0 while m[ti]: ti += 1 a[n-1] = str(ti+1) return "".join(a)if __name__ == "__main__": print(Solution().getPermutation(3, 6))
0 0
- LeetCode060 Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- Permutation Sequence
- 99乘法表
- CSDN如何转载别人文章
- jQuery常用知识总结
- vector的用法及基本操作
- 函数指针初始化和调用的几种方法
- LeetCode060 Permutation Sequence
- MPI之聚合通信collective communication-广播
- C++的三种继承方式详解
- Servlet简介
- 矩阵快速幂_求一个邻接矩阵中走m步的方法数
- opencv 图像金字塔
- Git学习-第二节:Egit使用
- 网页顶部横向导航栏的制作(最最基本的导航栏)
- [Tools]获取域环境内所有用户登录信息(附源码及程序)