Problème : 17. Combinaison de lettres du numéro de téléphone
Annuaire d'articles
train de pensée
Cette question sent le sentiment de DFS et BFS. Il semble que cela devrait être fait avec l'idée d'un graphe, mais voici encore une astuce. Une méthode relativement simple est utilisée pour remplacer la récursivité de DFS et BFS, et une méthode itérative est utilisée résoudre des problèmes.
méthode de résolution de problèmes
Tout d'abord, il est nécessaire de décomposer le sous-problème de ce problème. Par exemple, si l'utilisateur saisit un 2, alors la solution doit être ['a', 'b', 'c']. Si l'utilisateur saisit a 3 sur la base de 2, puis Le résultat qui nous apparaît doit être le résultat de l'addition de 3 sur la base de 2.
Par conséquent, si le résultat de 3 apparaît, nous devons étendre le tableau d'origine. Par exemple, le résultat de 3 est ['d', 'e', 'f']
, alors notre résultat final doit être 3x3 = 9, par conséquent, nous pouvons directement étendre le tableau à len(di_ch[key]) length et pass La méthode sorted trie.Après le tri, puisque l'ordre lexicographique est ordonné, l'ajout de chaînes peut être effectué directement et le tableau d'origine peut être directement modifié via la clé.
La complexité temporelle finale est O(n^2), et l'effet global est toujours très bon.
la complexité
- complexité temporelle :
Ajoutez la complexité temporelle, exemple : O ( n 2 ) O(n^2)O ( n2 )
- Complexité spatiale :
Ajoutez la complexité de l'espace, exemple : O ( n ) O(n)O ( n )
Code
class Solution:
di_ch ={
'2':'abc',
'3':'def',
'4':'ghi',
'5':'jkl',
'6':'mno',
'7':'pqrs',
'8':'tuv',
'9':'wxyz'
}
def solve(self,res,info):
di_ch = self.di_ch
if len(res) != 0:
ori_len = len(res)
res = res * len(di_ch[info])
res = sorted(res)
for index in range(0,len(res)):
key = index % len(di_ch[info])
res[index] = res[index] + di_ch[info][key]
else:
for item in di_ch[info]:
res.append(item)
return res
def letterCombinations(self, digits: str) -> List[str]:
res = []
for item in digits:
res = self.solve(res,item)
return res