第十二天:《LeetCode一天一例》-----n个不同的数组成n!个序列,找出第k个(又名Permutation Sequence)(python实现)

n!个序列中找第k个

        题目:  给定一个n = 7, 代表(1, 2, 3, 4, 5, 6, 7)。它们能组成7!个不同的序列。。在给定一个k值,找出第k个序列。。由于7! = 5040。 我们不可能全写出来。。我们来看一下当n = 3 时,总共有六种:(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)。。不知大家有没有看出什么规律?  

解析:

        看一下上图,这是我写的当n = 4 的时候,总共有24中,每个框中有六种,后面以4, 5, 6打头的这里不写了。为啥同一个打头的只有六种,有什么决定的呢?   就是有后面的剩余的三个数的组合。。因为三个数有六种组合。。所以给定k值,我们先判断它属于哪个组? 它属于哪个组,它的第一位就是几。。同理,确定了分组,再在分组中确定第二位,

同一分组内,除去第一位,不就是三个数的组合,再用同样的方法确定第二位的值 ,以此类推。。。。

Python代码实现

def find_n_k(n, k):

    # 首先进行累乘,算出当n等于几,有多少种组合
    fact = [0]*(n+1)  # 这里面
    fact[0] = 1  # 不从零个数开始  底下的for直接从1开始,然后到n
    for i in range(1, n+1):
        fact[i] = fact[i-1] * i
    # print(fact)  #[1, 1, 2, 6, 24, 120, 720, 5040]  可以看到第一个(实际第2个)位置是1,也就是一个数只有一种组合,
    #  第二个位置是2  也就是两个数有两种组合。  第三个位置时6,也就是说三个数有6中组合


    temp = [0]*n
    for i in range(1, n+1):
        temp[i-1] = i

    result = []
    k -= 1
    # 下面是核心思想
    for i in range(1, n):

        index = k // fact[n-i]

        result.append(temp[index])

        temp.remove(temp[index])
        k -= (index*fact[n-i])
    result.append(temp[0])
    return result


if __name__ == '__main__':

    n = 4   # 则总共有7!种组合
    k = 12   # 我们要在7!种找到第k个组合输出
    result = find_n_k(n, k)
    print('第{}个序列为:{}'.format(k, result))

结果输出:

 

全部评论

相关推荐

今天 11:10
武汉纺织大学 C++
点赞 评论 收藏
分享
01-23 19:12
门头沟学院 Java
榨出爱国基因:你还差 0.1% 就拿到校招礼盒,快叫朋友给你砍一刀吧
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 听劝,这个简历怎么改 #
14116次浏览 183人参与
# 面试被问“你的缺点是什么?”怎么答 #
6486次浏览 100人参与
# 水滴春招 #
16656次浏览 370人参与
# 入职第四天,心情怎么样 #
11356次浏览 63人参与
# 租房找室友 #
8060次浏览 53人参与
# 读研or工作,哪个性价比更高? #
26200次浏览 356人参与
# 职场新人生存指南 #
199308次浏览 5519人参与
# 参加完秋招的机械人,还参加春招吗? #
27030次浏览 276人参与
# 文科生还参加今年的春招吗 #
4123次浏览 31人参与
# 简历无回复,你会继续海投还是优化再投? #
48639次浏览 561人参与
# 你见过最离谱的招聘要求是什么? #
144724次浏览 829人参与
# 如果重来一次你还会读研吗 #
155733次浏览 1706人参与
# 机械人选offer,最看重什么? #
69078次浏览 449人参与
# 选择和努力,哪个更重要? #
44330次浏览 494人参与
# 如果再来一次,你还会学硬件吗 #
103653次浏览 1245人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
20529次浏览 414人参与
# 招聘要求与实际实习内容不符怎么办 #
46804次浏览 494人参与
# 22届毕业,是读研还是拿外包offer先苟着 #
4654次浏览 27人参与
# 你们的毕业论文什么进度了 #
901356次浏览 8961人参与
# 软开人,你觉得应届生多少薪资才算合理? #
81380次浏览 496人参与
# 国企还是互联网,你怎么选? #
109200次浏览 853人参与
牛客网
牛客企业服务