File tree Expand file tree Collapse file tree 1 file changed +46
-0
lines changed
Expand file tree Collapse file tree 1 file changed +46
-0
lines changed Original file line number Diff line number Diff line change 1+ #include < vector>
2+ #include < string>
3+ #include < algorithm>
4+
5+ class Solution {
6+ public:
7+ // Função recursiva que calcula o número de formas de decodificar a string
8+ int fun (int i, const std::string& s, std::vector<int >& dp) {
9+ // Caso base: quando i < 0, uma decodificação válida foi encontrada
10+ if (i < 0 ) {
11+ return 1 ;
12+ }
13+ // Caso base: se i for 0, verifica se o caractere é '0', que não pode ser decodificado
14+ if (i == 0 ) {
15+ return s[i] == ' 0' ? 0 : 1 ;
16+ }
17+ // Verifica se já foi calculado o valor para o índice 'i', para evitar calcular novamente
18+ if (dp[i] != -1 ) {
19+ return dp[i];
20+ }
21+
22+ int take = 0 ;
23+
24+ // Se o caractere atual não for '0', ele pode ser decodificado individualmente
25+ if (s[i] != ' 0' ) {
26+ take = fun (i - 1 , s, dp);
27+ }
28+
29+ // Verifica se os dois últimos caracteres formam um número válido entre 10 e 26
30+ if (i - 1 >= 0 && s[i - 1 ] != ' 0' && std::stoi (s.substr (i - 1 , 2 )) <= 26 ) {
31+ take += fun (i - 2 , s, dp);
32+ }
33+
34+ return dp[i] = take;
35+ }
36+
37+ // Função principal que inicializa o vetor dp e chama a função recursiva
38+ int numDecodings (const std::string& s) {
39+ // Verifica se a string é vazia, se for, não há como decodificar
40+ if (s.empty ()) {
41+ return 0 ;
42+ }
43+ std::vector<int > dp (s.length () + 1 , -1 );
44+ return fun (s.length () - 1 , s, dp);
45+ }
46+ };
You can’t perform that action at this time.
0 commit comments