【LeetCode每天一题】Permutation Sequence(排列序列)
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 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. Given k will be between 1 and n! inclusive.
Example 1:
Input: n = 3, k = 3 Output: "213"
Example 2:
Input: n = 4, k = 9 Output: "2314" 思路
看到这道题的时候我用的之前做的排列方法一样,就是一个一个的进行组合,当排列了第k个时直接结束排列,然后返回结果。但是提交时却是时间超时了。因为当n为9时,输出最后一个序列的运行时间特别长。这时我在想有没有什么其他的办法来解决这个问题,然后我当时想到了因为排列时是从第一个元素开始的,相当于每次固定一个元素,然后对后面的 n-1个元素进行排序。根据这个我们可以想到是不是可以根据n-1组合得数量来求得以第一个元素为准有多少种排列数。然后和k进行计算得到当前是对第几个元素为准得进行排列。然后直接以这个元素进行排列得到结果。这样可以省去前面元素排列时所耗费的时间。写出来也成功通过了。
但是运行结果的效率还是比较低,我们可以在上面的方法继续改进,就是使用循环每次根据k的值都从1至n个元素中挑选出一个,直到k为0时,然后组合结果。得到最终的序列,也就是第K个序列。但是这种办法自己没能写出来。
解决代码(第一种思路)
class Solution(object):
def getPermutation(self,n, k):
if n == 1:
return ''
nums = [i for i in range(1, n + 1)]
res = []
dp = [1]* (n-1)
for i in range(2, len(dp)+1): # 计算 n-1个元素有多少种组合数, 这里使用的数组来记录前一个元素的的组合数
dp[i-1] = i*dp[i-2]
num = dp[-1]
index = 0
if k > num: # 根据k来判断当前是对第几个元素来进行排列。
index = k//num
if k % num == 0:
index -= 1
k -= num*index
path = [nums[index]]
nums.pop(index)
self.permutation(nums, path, res, [0], k)
return ''.join(str(i) for i in res[-1]) def permutation(self, nums, path, res, k, kth): # 排列组合
if not nums:
res.append(path)
k[0] += 1
return
for i in range(len(nums)):
self.permutation(nums[:i] + nums[i + 1:], path + [nums[i]], res, k, kth)
if k[0] >= kth: # 第K个排列时直接返回
return
【LeetCode每天一题】Permutation Sequence(排列序列)的更多相关文章
- 060 Permutation Sequence 排列序列
给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列.按大小顺序列出所有排列情况,并一一标记,可得到如下序列 (例如, n = 3): 1."123" 2. & ...
- LeetCode(60) Permutation Sequence
题目 The set [1,2,3,-,n] contains a total of n! unique permutations. By listing and labeling all of th ...
- 【LeetCode每天一题】Permutations(排列组合)
Given a collection of distinct integers, return all possible permutations. Example: Input: [1,2,3] O ...
- LeetCode31 Next Permutation and LeetCode60 Permutation Sequence
Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...
- leetCode 60.Permutation Sequence (排列序列) 解题思路和方法
The set [1,2,3,-,n] contains a total of n! unique permutations. By listing and labeling all of the p ...
- [LeetCode] Permutation Sequence 序列排序
The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of the p ...
- 【leetcode刷题笔记】Permutation Sequence
The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of the p ...
- [LeetCode] 60. Permutation Sequence 序列排序
The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of the p ...
- [LeetCode] “全排列”问题系列(二) - 基于全排列本身的问题,例题: Next Permutation , Permutation Sequence
一.开篇 既上一篇<交换法生成全排列及其应用> 后,这里讲的是基于全排列 (Permutation)本身的一些问题,包括:求下一个全排列(Next Permutation):求指定位置的全 ...
随机推荐
- 连接慢的主要原因是DNS解析导致
连接慢的主要原因是DNS解析导致解决方法: 1.在ssh服务端上更改/etc/ssh/sshd_config文件中的配置为如下内容:UseDNS no# GSSAPI optionsGSSAPIAut ...
- golang mysql 的 packet sequence error 这个错
在公司用golang 写了个插入外链数据的服务,这服务是2016年写的,大概作用就是,python 爬取的数据,要同步到 wordpress中,golang就负责,将数据整理,图片下载弄到 wordp ...
- Redis docker安装和主要功能
docker安装redis 启动docker,下载redis镜像:docker pull redis 然后运行镜像并发布端口6379: 然后运行redis-cli(这是Redis的一个命令行管理工具) ...
- 业务线--node中间层做一个透传的项目
1,node中间层总结 1,ejs引入vue的js,路由层(直接透传,自定义行的),比较浅层的一层 中间件的引入 ? ) { // 与rd约定,接口成功返回code===0,其余为失败 console ...
- python基础一 ------排序和查找算法
插入排序; 假设数组长度为n,先从第二个元素开始,与前一个元素比较,之后将较小的元素 放在前面,现在前两个元素是有顺序的,这时取第三个元素,与前一个元素(也就是第二个)比较,较小的放在前面 ...
- JS简单实现分页显示
完整代码源码可以在这里下载 1.在 HTML文件建立列表目标节点和翻页器目标节点 <body> <!--页面控制器 --> <div id="nav" ...
- angular.identity()
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 触发器中的after与before理解
做一个表的insert的trigger,目的是只修改插入行的字段. CREATE OR REPLACE TRIGGER TR_RME_SLOT BEFORE INSERT ON RME_SLOT FO ...
- Windows 主机名映射地址
在开发中大数据集群中我们自己的电脑主机名映射不到集群的主机名下面我们就去修改自己电脑 主机名映射地址 c/Windows/System32/drivers/etc/host 文件将主机名和IP地址 ...
- Spring的核心模块解析
Spring框架是一个轻量级的集成式开发框架,可以和任何一种框架集成在一起使用,可以说是一个大的全家桶.Spring从1.x发展到现在的5.x可以说是越来越强大,下面来看看Spring都包含哪些核心的 ...