我在HackerRank上解决了下面的HackerRank问题。
这是我的解决办法-
from itertools import combinations
a = input()
ls = list(map(str, a.split()))
for i in range(1, int(ls[1])+1):
ls2 = []
ls2 = list(map("".join, combinations(ls[0], i)))
for elem in ls2:
ls2[ls2.index(elem)] = "".join(sorted(elem))
ls2.sort()
for char in ls2:
print(char)但是我觉得它不是很有效,因为它使用了2个列表和2个嵌套循环。
对于如何改进代码,有什么建议吗?
发布于 2020-11-28 16:06:40
很好的解决方案,以下是我的建议:
input总是返回一个字符串,因此可以删除映射。在Python2中,您可以使用raw_input。ls太通用了。在这种情况下,建议将问题描述中的名称取出来。出发地:a=str() ls = list(map(str,a.split()到: S,k=str().split()组合元组按照输入可迭代的顺序以字典顺序发出。因此,如果输入可迭代排序,组合元组将按排序顺序产生。
因此,不是对每个组合进行排序,而是在开始时对输入S进行足够的排序,所有组合都将自动排序。
itertools.combinations的输出:itertools.combinations的输出是一个可迭代的或多个元组,可以在for-循环中逐个打印组合。唯一的改变是将元组转换为字符串,并且可以用string.join完成。from itertools import combinations
S, k = input().split()
S_sorted = ''.join(sorted(S))
for i in range(1, int(k)+1):
for c in combinations(S_sorted, i):
print(''.join(c))https://codereview.stackexchange.com/questions/252786
复制相似问题