permutation相关题目: 60

  1. 从1到n构成的数字的第k位
    def __init__(self):
        self.res = ''

    def getPermutation(self, n, k):
        """
        :type n: int
        :type k: int
        :rtype: str
        """
        arr = [i for i in range(1, n + 1)]
        fac = [0, 1, 1]
        for i in range(3, n + 1):
            fac.append((i - 1) * fac[i - 1])
        self.dfs(k, arr, fac)
        return self.res

    def dfs(self, k, arr, fac):
        # 以1-n开头分组,计算每组的的数量为grouplen,等于(n-1)!
        grouplen = fac[len(arr)]
        # 根据排序的第几位k和grouplen获得要将排好序的arr中的哪个arr[idx]加入到res中
        idx = (k-1) // grouplen
        self.res += str(arr[idx])
        # 把加进去的数pop掉,k在选中的组别中的排序等于k%grouplen
        arr.pop(idx)
        remain = k % grouplen
        # 递归调用
        if arr:
            self.dfs(remain, arr, fac)

转载于:https://www.jianshu.com/p/b041a6afe351

猜你喜欢

转载自blog.csdn.net/weixin_33922672/article/details/91054506