leetcode:60順列シーケンス

タイトル

セットには   、合計が含ま  Nをユニークな順列。[1,2,3,...,n]

ために、順列のすべてを一覧表示し、標識することにより、我々は次のシーケンスを取得し  、N  = 3:

  1. "123"

  2. "132"

  3. "213"

  4. "231"

  5. "312"

  6. "321"

与えられた  N  と  K、返す  のk番目の順列シーケンスを。

注意:

  • 与えられた  nは  1と9込みの間になります。

  • 与えられた  kは  1との間になります  N包括的。

例1:

      入力: N = 3、K = 3
             出力: "213"

例2:

     入力: N = 4、K = 9
            の出力: "2314"

思考

低速デジタル高からの変化が減少:ルールがある見つけることができます。!0ビット毎に(N-1)倍の第一の変形例;! 1ビット、それぞれ(N-2)のものとなります。

def getPermutation(self, n: int, k: int) -> str:
        ans = [0]*n
        nums = [i for i in range(1,n+1)]

        # n-1 的阶乘
        n_p = 1
        for i in range(1,n):
            n_p *= i

        # 从高位到低位安排数字
        for i in range(n-1):
            index = k // n_p + int(k%n_p>0)
            ans[i] = nums[index-1]
            nums.remove(nums[index-1])
            k = k % n_p
            n_p = n_p // (n-i-1)
        ans[n-1] = nums[-1]

        ans_str = ""
        for i in ans:
            ans_str += str(i)
        return ans_str
            

 

公開された45元の記事 ウォンの賞賛1 ビュー3361

おすすめ

転載: blog.csdn.net/qq_22498427/article/details/104568448