[Question de pinceau d'algorithme] Solution non récursive à la combinaison de lettres des numéros de téléphone

Problème : 17. Combinaison de lettres du numéro de téléphone

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








        
        

Je suppose que tu aimes

Origine blog.csdn.net/qq_27180763/article/details/129478527
conseillé
Classement