2017-05-26 55 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將是第一個字符)。這更像是一個數學問題。

相關問題