https://leetcode.com/problems/permutation-sequence/

https://leetcode.com/problems/permutation-sequence/


这道题我是这样想的 

按从小到大排列 

如果n个数 最高位就有n种 每种开头还有(n-1)!种 那么k包含x个(n-1)! 就说明首尾就是[1,n]里第x+1小的 

import math
class Solution:
    # @param n, an integer
    # @param k, an integer
    # @return a string
    def getPermutation(self, n, k):
        k=k-1
        array=[]            #用来存k/(n-1)!的商 代表应该在剩余的数里选第几小的
        solution=[]   #用来存最后结果的每一位 不用数组直接字符串或者直接sequence得到的数据*10这样都行 习惯放到数组里了
        sequence=[]         #将1-n顺序排列 选第几大的就根据下表取 取完就删除 下次还可以取第几小的
        for i in range(n):
            array.append(0)
            solution.append(0)
            sequence.append(i+1)
    
        j=n
        i=0
        while k>=1:
            x=k/math.factorial(j-1) 
            k=k-x*math.factorial(j-1) 
            array[i]=x
            j=j-1
            i=i+1
        #search the xth small number 
        for i in range(len(array)):
            seq=array[i]
            solution[i]=sequence[seq]
            del sequence[seq]
        numStr=''
        for i in solution:
            numStr=numStr+str(i)
        return numStr


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值