第十二天:《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))

结果输出:

 

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 18:22
投了几百份简历,专业和方向完全对口,都已读不回。尝试改了一下学校,果然有奇效。
steelhead:这不是很正常嘛,BOSS好的是即便是你学院本可能都会和聊几句,牛客上学院本机会很少了
点赞 评论 收藏
分享
Rena1ssanc...:对的,要是面评没太烂,勤更新简历等捞就行了,腾讯可以无限复活
点赞 评论 收藏
分享
就前几天旅游的时候,打开抖音就经常刷到这类视频:以前是高学历学生、老师、主持人,现在做着团播、擦边主播的工作,以及那些经过精心包装的“职业转型”故事——从铺天盖地的VLOG到所谓的“04年夜场工作日记”,这些内容在初中升学、高考放榜等关键时间节点持续发酵。可以说非常直接且精准地在潜移默化地影响着心智尚未成熟的青少年,使其对特殊行业逐渐脱敏。那我就想问了:某些传播公司、平台运营者甚至某些夜场的老板,你们究竟在传递怎样的价值观?点开那些视频,评论区里也是呈现明显的两极分化:一种是​​经济下行论​​:“现在就业市场已经艰难到这种程度了吗?”​​一种是事实反驳派​​:这些创作者往往拥有名校背景,从事着...
牛客刘北:被环境教育的,为了能拿到足够的钱养活自己,不甘心也得甘心,现在的短视频传播的思想的确很扭曲,但是很明显,互联网玩上一年你就能全款提A6,但你全心全意不吃不喝工作一年未必能提A6,但是在高考中考出现这个的确很扭曲,在向大家传播“不上学,玩互联网也可以轻松年入百万”,不是人变了,是社会在变
预测一下26届秋招形势
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务