https://leetcode-cn.com/problems/permutation-sequence/
# -*- coding:utf-8 -*- class Solution(object): def getPermutation(self, n, k): """ :type n: int :type k: int :rtype: str """ def back(i, flag_list, temp_list=[]): """ 回溯 :return: """ if i == n: output.append(temp_list) return for j in range(len(flag_list)): if flag_list[j] != 0: flag_list[j] = 0 temp_list.append(j + 1) back(i + 1, flag_list[:], temp_list[:]) flag_list[j] = 1 temp_list = temp_list[:-1] output = [] flag_list = [1 for _ in range(n)] back(0, flag_list) res = '' for each in output[k-1]: res = res+str(each) return res if __name__ == '__main__': n = 3 k = 3 print(Solution().getPermutation(n, k))
思路:回溯,和前面比较像。
但是这道题学到了一个新东西,康托展开,这东西也太强了,可以直接算出结果。
chs = [i for i in range(1, 10)]
factor = [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]
k -= 1
ans = ''
for i in range(n - 1, -1, -1):
j, k = divmod(k, factor[i])
ans += str(chs.pop(j))
return ans
0 条评论