2017-05-26 17 views
0

我试图解决以下问题,询问时,他们被安排在字典顺序如何在给定的时间内找到第n个谜语?

Sample Input 

bcda 20 
cbad 5 
ydvtrs 268 
asfda 32 

Sample Output 

dacb 
adbc 
srdvyt 
dfasa 

我试图解决用户查找和打印的出现在N {日}位置给定字符串的字谜在下面的方式问题:

import itertools 
a = sorted(set(["".join(perm) for perm in itertools.permutations("abc")])) 
a[n] 

但我的代码是根据他们服用10S,他们都在问我在2秒做。

他们测试了20个输入,他们都给了10个或附近的那个。

+0

亚马逊招聘比赛:P – mohsinulhaq

+0

已经提交 –

+0

解决了这两个问题? – mohsinulhaq

回答

0

您正在生成所有可能的anagrams排序,然后获得第n个。

如果相反您先排序该词,则anagrams将已排序。这样你就不需要对所有的字符进行排序(你正在节约O(n * log(n)),其中n是字符的数量)。你也不需要运行整个发电机,直到它达到你想要的数量 - 如果这个数字很小,这也是一个巨大的收益。

import itertools 

word = "ydvtrs" 
n = 268 

sorted_word = ''.join(sorted(word)) 

print next(itertools.islice(("".join(perm) for perm in itertools.permutations(sorted_word)), n, n + 1)) 
+0

如何删除重复项? – mohsinulhaq

+1

@mohsinulhaq你是对的,当这个词有重复时,这不起作用。我没有意识到这是一个问题。我会考虑一下 –

0

你必须仔细考虑并采取一种不那么残酷的方法。 例如: - 输入字符串是abcd - 我知道按字母顺序排列6个字符后,我会以b开头(bacd将是第一个字符)。这更像是一个数学问题。

相关问题