Skip to content

Commit b57ecf0

Browse files
committed
add: acrescentando leetcode91
1 parent 9f32a14 commit b57ecf0

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

LeetCode_91/decode_ways.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
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+
};

0 commit comments

Comments
 (0)