zoukankan      html  css  js  c++  java
  • 边工作边刷题:70天一遍leetcode: day 93

    Permutation Sequence

    原理:一个permutation是n位,在第i位的值取决于有多少个i-1位的组合。这i-1位的组合是在高位pick完之后剩下的数中
    细节:

    • 低位的个数和哪个数已经pick了是无关的,只有选择具体数时候才有关
    • 不同于decimal,位数是固定的,所以不能用k>0作为循环条件(这样只会选择某几位),而是用for循环。
    • 当i=0的时候,要选取最后一个位,但factorial不能再除i或者0了,所以这里要加corner的判断
    class Solution(object):
        def getPermutation(self, n, k):
            """
            :type n: int
            :type k: int
            :rtype: str
            """
            fact = 1
            for i in range(2, n):
                fact*=i
    
            nums = range(1,n+1)
    
            k-=1
            res = []
            for i in range(n-1, -1, -1):
                p = k/fact
                k = k-k/fact*fact
                res.append(str(nums[p]))
                del nums[p]
                if i!=0: fact/=i
            #res.append(str(nums[0]))
            return ''.join(res)
                
    
  • 相关阅读:
    CalISBN.java
    Int2BinaryString.java
    PrintNumber.java
    AllSame.java
    第一个程序
    将博客搬至CSDN
    sqoop 1.4.4-cdh5.1.2快速入门
    hadoop的关键进程
    HIVE快速入门
    公钥,私钥和数字签名这样最好理解
  • 原文地址:https://www.cnblogs.com/absolute/p/6041364.html
Copyright © 2011-2022 走看看