zoukankan      html  css  js  c++  java
  • LinkCode 第k个排列

    http://www.lintcode.com/zh-cn/problem/permutation-sequence/#

    原题

    给定 n 和 k,求123..n组成的排列中的第 k 个排列。

     注意事项

    1 ≤ n ≤ 9

    样例

    对于 n = 3, 所有的排列如下:

    123
    132
    213
    231
    312
    321
    

    如果 k = 4, 第4个排列为,231.

    解题思路

    使用递归得到全排列的所有解,接着从这些解中找到第K个

    代码实现

    # 递归的方法,创建一个visit判断此值是否已经添加过,每一层不断地循环,加入没有被访问的元素,直到最后结果的长度满足要求加入答案中
    class Solution:
        """
        @param n: n
        @param k: the k-th permutation
        @return: a string, the k-th permutation
        """
    
        def getPermutation(self, n, k):
            nums = [x for x in range(1, n + 1)]
            visit = [0 for i in range(n)]
            self.ret = []
            self._permute(nums, visit, 0, [])
            # 因为结果要返回字符串类型,所以对数字类型进行处理
            ans = [str(j) for j in self.ret[k-1]]
            return "".join(ans)
    
        def _permute(self, nums, visit, count, ret):
            if count == len(nums):
                self.ret.append(ret)
                return
            for i in range(len(nums)):
                if visit[i] == 0:
                    # ret += [nums[i]]  容易出错,如果加入这句后面需要还原,不然影响后面的循环
                    visit[i] = 1
                    self._permute(nums, visit, count + 1, ret + [nums[i]])
                    visit[i] = 0
    

      

  • 相关阅读:
    Linux下JDK的安装
    Docker 搭建 Maven 私服
    K8s 部署 PostgreSQL
    CentOS7 使用 kubeadm 部署 K8s(单机/集群)
    CentOS7 升级 Vim
    Go 函数详解
    CentOS7 安装 golang
    Redis 集群伸缩原理
    CentOS7 安装 Redis
    CentOS7 搭建 Redis 集群
  • 原文地址:https://www.cnblogs.com/LiCheng-/p/6634929.html
Copyright © 2011-2022 走看看