码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 60. Permutation Sequence

时间:2017-01-07 16:37:45      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:思路   actor   ret   tor   int   技术分享   技术   tco   边界条件   

The set [1,2,3,…,n] contains a total of n! unique permutations.

By listing and labeling all of the permutations in order,
We get the following sequence (ie, for n = 3):

  1. "123"
  2. "132"
  3. "213"
  4. "231"
  5. "312"
  6. "321"

Given n and k, return the kth permutation sequence.

Note: Given n will be between 1 and 9 inclusive.

思路: 看一个例子 n=4: k=15。每一个色块的大小都是(n-1)! = 6。k在第三个色块里,所以第1个数字是3。然后在紫色块中调用递归函数,这是我们剩余的数字是[124],等价的 k = 15-6*2 = 3。边界条件是 len(nums) == 1。注意这个求在第几个色块里的操作是 (k-1)//factorial(n-1),和求矩阵里的第k个元素是在哪一行哪一列类似。

技术分享

 1 class Solution(object):
 2     def getPermutation(self, n, k):
 3         """
 4         :type n: int
 5         :type k: int
 6         :rtype: str
 7         """
 8         nums = list(range(1, n+1))
 9         res = []
10         self.helper(nums, res, k)
11         a = map(str, res)    
12         return ‘‘.join(a)      
13     
14     def helper(self, nums, res, k):
15         
16         n = len(nums)
17         if n == 1:
18             res += nums
19             return 
20         
21         i = (k-1)/math.factorial(n-1)
22         res += [nums[i]]
23         nums = nums[:i]+nums[i+1:]
24         k = k - i*math.factorial(n-1)
25         self.helper(nums, res, k)
26         

 

Leetcode 60. Permutation Sequence

标签:思路   actor   ret   tor   int   技术分享   技术   tco   边界条件   

原文地址:http://www.cnblogs.com/lettuan/p/6259544.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!