feat: added alternative solution and TLE solution to decode-ways problem, wrote the tutorial file and added some more manual test cases

This commit is contained in:
2025-11-11 11:10:17 -03:00
parent 353fd05093
commit e37b1b1544
200 changed files with 466 additions and 281 deletions

Binary file not shown.

View File

@@ -0,0 +1,51 @@
\documentclass[10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath,amsthm,amssymb}
\usepackage{fullpage}
\usepackage{url}
\pagenumbering{gobble}
\usepackage{hyperref}
\title{ Tutorial: Decodificando Mensagens}
\author{Leetcode 91}
\date{}
\begin{document}
\maketitle
O problema pode ser resolvido utilizando uma abordagem de \textbf{programação dinâmica}, na qual calculamos, passo a passo, o número de formas possíveis de decodificar a sequência até cada posição.
A ideia é que cada dígito (ou par de dígitos consecutivos) da sequência pode representar uma letra do alfabeto latino, desde que o valor correspondente esteja entre $1$ e $26$. Assim, precisamos contar todas as maneiras válidas de interpretar a sequência numérica.
Definimos uma estrutura de DP com dois estados para cada posição $i$:
\begin{itemize}
\item $dp[i][0]$: número de mensagens possíveis terminando no caractere $i$ \textbf{quando o dígito atual não é concatenado} com o anterior;
\item $dp[i][1]$: número de mensagens possíveis terminando no caractere $i$ \textbf{quando o dígito atual é concatenado} com o anterior.
\end{itemize}
A transição entre os estados é definida da seguinte forma:
\begin{itemize}
\item Se o dígito atual $s[i]$ está entre $1$ e $9$, ele pode ser interpretado como uma letra individual. Logo:
\[
dp[i][0] = dp[i - 1][0] + dp[i - 1][1]
\]
\item Se a combinação dos dois últimos dígitos $s[i-1]s[i]$ forma um número entre $10$ e $26$, então esses dois dígitos podem ser interpretados como uma única letra:
\[
dp[i][1] = dp[i - 2][0] + dp[i - 2][1]
\]
\end{itemize}
A base da recorrência é:
\[
dp[0][0] = 1, \quad dp[0][1] = 0, \quad dp[1][0] = 1, \quad dp[1][1] = 0
\]
pois antes de processar qualquer caractere há exatamente uma maneira “vazia” de formar uma mensagem válida, e o primeiro dígito pode, no máximo, representar uma única letra isolada.
O resultado final é dado pela soma:
\[
dp[n][0] + dp[n][1]
\]
onde $n$ é o comprimento da sequência de entrada.
Essa solução possui complexidade de tempo e espaço $O(n)$, podendo ser otimizada para $O(1)$ espaço se armazenarmos apenas os últimos dois estados necessários para o cálculo.
\end{document}

Binary file not shown.

View File

@@ -1,2 +1,2 @@
2 5
91 37679

View File

@@ -1,2 +1,2 @@
48 39
518576418188343163835239258872334287663796652624 926784174771952776334684785835183413371

View File

@@ -1,2 +1,2 @@
68 87
52611796735121263614334491834993887664736392163582841633871161326664 289464652164533976872545264322123756175737932929933941773473296396874643587186562586223

View File

@@ -1,2 +1,2 @@
53 50
78918262129187186226632721586627412359187439651896536 88568481414945636815725155825841475572525196793844

View File

@@ -1,2 +1,2 @@
82 48
1472422558528699249214744131191854224759984764314392981892686621213825459276764139 518576418188343163835239258872334287663796652624

View File

@@ -1,2 +1,2 @@
75 68
337487917337778439116484693776643462673224333737181491845687417121878438442 52611796735121263614334491834993887664736392163582841633871161326664

View File

@@ -1,2 +1,2 @@
48 53
963474156832317453372274752839831748129848526892 78918262129187186226632721586627412359187439651896536

View File

@@ -1,2 +1,2 @@
100 82
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 1472422558528699249214744131191854224759984764314392981892686621213825459276764139

View File

@@ -1,2 +1,2 @@
100 75
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 337487917337778439116484693776643462673224333737181491845687417121878438442

2
decode-ways/input/108 Normal file
View File

@@ -0,0 +1,2 @@
48
963474156832317453372274752839831748129848526892

2
decode-ways/input/109 Normal file
View File

@@ -0,0 +1,2 @@
100
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

View File

@@ -1,2 +1,2 @@
1 3
9 966

2
decode-ways/input/110 Normal file
View File

@@ -0,0 +1,2 @@
100
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

View File

@@ -1,2 +1,2 @@
2 3
16 999

View File

@@ -1,2 +1,2 @@
4 2
2388 91

View File

@@ -1,2 +1,2 @@
1 2
5 16

View File

@@ -1,2 +1,2 @@
3 4
467 2388

View File

@@ -1,2 +1,2 @@
5 1
42142 9

View File

@@ -1,2 +1,2 @@
1 1
3 5

View File

@@ -1,2 +1,2 @@
5 3
51865 467

View File

@@ -1,2 +1,2 @@
2 5
27 42142

View File

@@ -1,2 +1,2 @@
2 1
46 3

View File

@@ -1,2 +1,2 @@
5 5
88626 51865

View File

@@ -1,2 +1,2 @@
5 2
55673 27

View File

@@ -1,2 +1,2 @@
4 2
4647 46

View File

@@ -1,2 +1,2 @@
5 5
79735 88626

View File

@@ -1,2 +1,2 @@
3 5
488 55673

View File

@@ -1,2 +1,2 @@
4 4
8282 4647

View File

@@ -1,2 +1,2 @@
3 5
453 79735

View File

@@ -1,2 +1,2 @@
4 3
2554 488

View File

@@ -1,2 +1,2 @@
4 4
2859 8282

View File

@@ -1,2 +1,2 @@
3 3
568 453

View File

@@ -1,2 +1,2 @@
4 4
7752 2554

View File

@@ -1,2 +1,2 @@
2 4
22 2859

View File

@@ -1,2 +1,2 @@
4 3
3151 568

View File

@@ -1,2 +1,2 @@
3 4
876 7752

View File

@@ -1,2 +1,2 @@
3 2
343 22

View File

@@ -1,2 +1,2 @@
5 4
18499 3151

View File

@@ -1,2 +1,2 @@
1 3
5 876

View File

@@ -1,2 +1,2 @@
14 3
37196832511826 343

View File

@@ -1,2 +1,2 @@
14 5
64484224997944 18499

View File

@@ -1,2 +1,2 @@
1
5 5
24949

View File

@@ -1,2 +1,2 @@
17 14
37294479837671427 37196832511826

View File

@@ -1,2 +1,2 @@
16 14
8428292392363723 64484224997944

View File

@@ -1,2 +1,2 @@
18 5
273528536665319655 24949

View File

@@ -1,2 +1,2 @@
20 17
24719734762578639371 37294479837671427

View File

@@ -1,2 +1,2 @@
1 16
2 8428292392363723

View File

@@ -1,2 +1,2 @@
8 18
15247334 273528536665319655

View File

@@ -1,2 +1,2 @@
12 20
136113183132 24719734762578639371

View File

@@ -1,2 +1,2 @@
3 1
999 2

View File

@@ -1,2 +1,2 @@
9 20
123456789 11111111111111111111

View File

@@ -1,2 +1,2 @@
19 8
7241653425678432716 15247334

View File

@@ -1,2 +1,2 @@
20 12
34126267846874316445 136113183132

View File

@@ -1,2 +1,2 @@
2 3
18 999

View File

@@ -1,2 +1,2 @@
17 19
84276873496766337 7241653425678432716

View File

@@ -1,2 +1,2 @@
19 20
5958182244867784952 34126267846874316445

View File

@@ -1,2 +1,2 @@
13 2
9589633411419 18

View File

@@ -1,2 +1,2 @@
10 17
8398213573 84276873496766337

View File

@@ -1,2 +1,2 @@
26 19
73663332643446699323268217 5958182244867784952

View File

@@ -1,2 +1,2 @@
51 13
597752268768498572655986286986334279136111777165378 9589633411419

View File

@@ -1,2 +1,2 @@
9 10
451285328 8398213573

View File

@@ -1,2 +1,2 @@
2 45
82 111111111111111111111111111111111111111111111

View File

@@ -1,2 +1,2 @@
25 26
5179694487483151683559695 73663332643446699323268217

View File

@@ -1,2 +1,2 @@
100 51
8316458848752384176499983776724483328624123861532722553258433293959428726775271517961761959111789139 597752268768498572655986286986334279136111777165378

View File

@@ -1,2 +1,2 @@
9 9
143311934 451285328

View File

@@ -1,2 +1,2 @@
14 25
56564483689558 5179694487483151683559695

View File

@@ -1,2 +1,2 @@
9 100
255811985 8316458848752384176499983776724483328624123861532722553258433293959428726775271517961761959111789139

View File

@@ -1,2 +1,2 @@
50 9
16741576977262376174576888714481988178418237879751 143311934

View File

@@ -1,2 +1,2 @@
34 14
7912496541424572969715221578743582 56564483689558

View File

@@ -1,2 +1,2 @@
66 9
511181583562138544652879939619627143791253131734323199639644813935 255811985

View File

@@ -1,2 +1,2 @@
23 50
34741989276975341315688 16741576977262376174576888714481988178418237879751

View File

@@ -1,2 +1,2 @@
23 34
45243179164459651875893 7912496541424572969715221578743582

View File

@@ -1,2 +1,2 @@
5 45
37679 111111111111111111111000000000000000000000000

View File

@@ -1,2 +1,2 @@
18 66
698195955781719962 511181583562138544652879939619627143791253131734323199639644813935

View File

@@ -1,2 +1,2 @@
55 23
7582648264398882877454489217294277449711166684383791147 34741989276975341315688

View File

@@ -1,2 +1,2 @@
91 23
3845152233572493744521853897783842761323223652968987664537616595428385811273627127469429381 45243179164459651875893

View File

@@ -1,2 +1,2 @@
1 18
1 698195955781719962

View File

@@ -1,2 +1,2 @@
35 55
37685246269847376739186534397615885 7582648264398882877454489217294277449711166684383791147

View File

@@ -1,2 +1,2 @@
33 91
437232465386456746384257211614427 3845152233572493744521853897783842761323223652968987664537616595428385811273627127469429381

View File

@@ -1,2 +1,2 @@
77 1
17627517227585432463647443411727297154114579897575441832469788516169223138766 1

View File

@@ -1,2 +1,2 @@
6 35
236636 37685246269847376739186534397615885

View File

@@ -1,2 +1,2 @@
89 33
56785878774135436521917749817518257767277569393487816624138298551327985724282322911471635 437232465386456746384257211614427

View File

@@ -1,2 +1,2 @@
22 77
5368853232981964665459 17627517227585432463647443411727297154114579897575441832469788516169223138766

View File

@@ -1,2 +1,2 @@
3 9
966 123456789

View File

@@ -1,2 +1,2 @@
28 6
3661945636959924865895846599 236636

View File

@@ -1,2 +1,2 @@
22 89
9162867281853634311682 56785878774135436521917749817518257767277569393487816624138298551327985724282322911471635

View File

@@ -1,2 +1,2 @@
54 22
999497851484629835958949631491319582288263883695162451 5368853232981964665459

View File

@@ -1,2 +1,2 @@
36 28
966175859412534487161999147248815572 3661945636959924865895846599

View File

@@ -1,2 +1,2 @@
42 22
173184196431757315622639898225196889893963 9162867281853634311682

View File

@@ -1,2 +1,2 @@
97 54
9566988274161314117748561711233529414952989568468244593491147579639921595125316948833947962993645 999497851484629835958949631491319582288263883695162451

View File

@@ -1,2 +1,2 @@
92 36
41936458821482611656832918868813157673644393869888125877891312946217957114117772772821737554 966175859412534487161999147248815572

View File

@@ -1,2 +1,2 @@
60 42
897695728994154752385672625781113921437631223164657764585738 173184196431757315622639898225196889893963

View File

@@ -1,2 +1,2 @@
47 97
35839563993964564988114497921613189536194214699 9566988274161314117748561711233529414952989568468244593491147579639921595125316948833947962993645

View File

@@ -1,2 +1,2 @@
28 92
5919482365125774713895541215 41936458821482611656832918868813157673644393869888125877891312946217957114117772772821737554

View File

@@ -1,2 +1,2 @@
3 2
999 82

View File

@@ -1,2 +1,2 @@
34 60
5121266393832816569681656646982897 897695728994154752385672625781113921437631223164657764585738

View File

@@ -1,2 +1,2 @@
44 47
81585764841332967586694741428675158993386693 35839563993964564988114497921613189536194214699

Some files were not shown because too many files have changed in this diff Show More