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:
BIN
decode-ways/decode-ways-tutorial.pdf
Normal file
BIN
decode-ways/decode-ways-tutorial.pdf
Normal file
Binary file not shown.
51
decode-ways/decode-ways-tutorial.tex
Normal file
51
decode-ways/decode-ways-tutorial.tex
Normal 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.
@@ -1,2 +1,2 @@
|
|||||||
2
|
5
|
||||||
91
|
37679
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
48
|
39
|
||||||
518576418188343163835239258872334287663796652624
|
926784174771952776334684785835183413371
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
68
|
87
|
||||||
52611796735121263614334491834993887664736392163582841633871161326664
|
289464652164533976872545264322123756175737932929933941773473296396874643587186562586223
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
53
|
50
|
||||||
78918262129187186226632721586627412359187439651896536
|
88568481414945636815725155825841475572525196793844
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
82
|
48
|
||||||
1472422558528699249214744131191854224759984764314392981892686621213825459276764139
|
518576418188343163835239258872334287663796652624
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
75
|
68
|
||||||
337487917337778439116484693776643462673224333737181491845687417121878438442
|
52611796735121263614334491834993887664736392163582841633871161326664
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
48
|
53
|
||||||
963474156832317453372274752839831748129848526892
|
78918262129187186226632721586627412359187439651896536
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
100
|
82
|
||||||
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
|
1472422558528699249214744131191854224759984764314392981892686621213825459276764139
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
100
|
75
|
||||||
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
337487917337778439116484693776643462673224333737181491845687417121878438442
|
||||||
|
|||||||
2
decode-ways/input/108
Normal file
2
decode-ways/input/108
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
48
|
||||||
|
963474156832317453372274752839831748129848526892
|
||||||
2
decode-ways/input/109
Normal file
2
decode-ways/input/109
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
100
|
||||||
|
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
1
|
3
|
||||||
9
|
966
|
||||||
|
|||||||
2
decode-ways/input/110
Normal file
2
decode-ways/input/110
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
100
|
||||||
|
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
2
|
3
|
||||||
16
|
999
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
4
|
2
|
||||||
2388
|
91
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
1
|
2
|
||||||
5
|
16
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
3
|
4
|
||||||
467
|
2388
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
5
|
1
|
||||||
42142
|
9
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
1
|
1
|
||||||
3
|
5
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
5
|
3
|
||||||
51865
|
467
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
2
|
5
|
||||||
27
|
42142
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
2
|
1
|
||||||
46
|
3
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
5
|
5
|
||||||
88626
|
51865
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
5
|
2
|
||||||
55673
|
27
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
4
|
2
|
||||||
4647
|
46
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
5
|
5
|
||||||
79735
|
88626
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
3
|
5
|
||||||
488
|
55673
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
4
|
4
|
||||||
8282
|
4647
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
3
|
5
|
||||||
453
|
79735
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
4
|
3
|
||||||
2554
|
488
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
4
|
4
|
||||||
2859
|
8282
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
3
|
3
|
||||||
568
|
453
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
4
|
4
|
||||||
7752
|
2554
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
2
|
4
|
||||||
22
|
2859
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
4
|
3
|
||||||
3151
|
568
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
3
|
4
|
||||||
876
|
7752
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
3
|
2
|
||||||
343
|
22
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
5
|
4
|
||||||
18499
|
3151
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
1
|
3
|
||||||
5
|
876
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
14
|
3
|
||||||
37196832511826
|
343
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
14
|
5
|
||||||
64484224997944
|
18499
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
|
1
|
||||||
5
|
5
|
||||||
24949
|
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
17
|
14
|
||||||
37294479837671427
|
37196832511826
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
16
|
14
|
||||||
8428292392363723
|
64484224997944
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
18
|
5
|
||||||
273528536665319655
|
24949
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
20
|
17
|
||||||
24719734762578639371
|
37294479837671427
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
1
|
16
|
||||||
2
|
8428292392363723
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
8
|
18
|
||||||
15247334
|
273528536665319655
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
12
|
20
|
||||||
136113183132
|
24719734762578639371
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
3
|
1
|
||||||
999
|
2
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
9
|
20
|
||||||
123456789
|
11111111111111111111
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
19
|
8
|
||||||
7241653425678432716
|
15247334
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
20
|
12
|
||||||
34126267846874316445
|
136113183132
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
2
|
3
|
||||||
18
|
999
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
17
|
19
|
||||||
84276873496766337
|
7241653425678432716
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
19
|
20
|
||||||
5958182244867784952
|
34126267846874316445
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
13
|
2
|
||||||
9589633411419
|
18
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
10
|
17
|
||||||
8398213573
|
84276873496766337
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
26
|
19
|
||||||
73663332643446699323268217
|
5958182244867784952
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
51
|
13
|
||||||
597752268768498572655986286986334279136111777165378
|
9589633411419
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
9
|
10
|
||||||
451285328
|
8398213573
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
2
|
45
|
||||||
82
|
111111111111111111111111111111111111111111111
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
25
|
26
|
||||||
5179694487483151683559695
|
73663332643446699323268217
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
100
|
51
|
||||||
8316458848752384176499983776724483328624123861532722553258433293959428726775271517961761959111789139
|
597752268768498572655986286986334279136111777165378
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
9
|
9
|
||||||
143311934
|
451285328
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
14
|
25
|
||||||
56564483689558
|
5179694487483151683559695
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
9
|
100
|
||||||
255811985
|
8316458848752384176499983776724483328624123861532722553258433293959428726775271517961761959111789139
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
50
|
9
|
||||||
16741576977262376174576888714481988178418237879751
|
143311934
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
34
|
14
|
||||||
7912496541424572969715221578743582
|
56564483689558
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
66
|
9
|
||||||
511181583562138544652879939619627143791253131734323199639644813935
|
255811985
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
23
|
50
|
||||||
34741989276975341315688
|
16741576977262376174576888714481988178418237879751
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
23
|
34
|
||||||
45243179164459651875893
|
7912496541424572969715221578743582
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
5
|
45
|
||||||
37679
|
111111111111111111111000000000000000000000000
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
18
|
66
|
||||||
698195955781719962
|
511181583562138544652879939619627143791253131734323199639644813935
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
55
|
23
|
||||||
7582648264398882877454489217294277449711166684383791147
|
34741989276975341315688
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
91
|
23
|
||||||
3845152233572493744521853897783842761323223652968987664537616595428385811273627127469429381
|
45243179164459651875893
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
1
|
18
|
||||||
1
|
698195955781719962
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
35
|
55
|
||||||
37685246269847376739186534397615885
|
7582648264398882877454489217294277449711166684383791147
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
33
|
91
|
||||||
437232465386456746384257211614427
|
3845152233572493744521853897783842761323223652968987664537616595428385811273627127469429381
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
77
|
1
|
||||||
17627517227585432463647443411727297154114579897575441832469788516169223138766
|
1
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
6
|
35
|
||||||
236636
|
37685246269847376739186534397615885
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
89
|
33
|
||||||
56785878774135436521917749817518257767277569393487816624138298551327985724282322911471635
|
437232465386456746384257211614427
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
22
|
77
|
||||||
5368853232981964665459
|
17627517227585432463647443411727297154114579897575441832469788516169223138766
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
3
|
9
|
||||||
966
|
123456789
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
28
|
6
|
||||||
3661945636959924865895846599
|
236636
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
22
|
89
|
||||||
9162867281853634311682
|
56785878774135436521917749817518257767277569393487816624138298551327985724282322911471635
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
54
|
22
|
||||||
999497851484629835958949631491319582288263883695162451
|
5368853232981964665459
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
36
|
28
|
||||||
966175859412534487161999147248815572
|
3661945636959924865895846599
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
42
|
22
|
||||||
173184196431757315622639898225196889893963
|
9162867281853634311682
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
97
|
54
|
||||||
9566988274161314117748561711233529414952989568468244593491147579639921595125316948833947962993645
|
999497851484629835958949631491319582288263883695162451
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
92
|
36
|
||||||
41936458821482611656832918868813157673644393869888125877891312946217957114117772772821737554
|
966175859412534487161999147248815572
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
60
|
42
|
||||||
897695728994154752385672625781113921437631223164657764585738
|
173184196431757315622639898225196889893963
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
47
|
97
|
||||||
35839563993964564988114497921613189536194214699
|
9566988274161314117748561711233529414952989568468244593491147579639921595125316948833947962993645
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
28
|
92
|
||||||
5919482365125774713895541215
|
41936458821482611656832918868813157673644393869888125877891312946217957114117772772821737554
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
3
|
2
|
||||||
999
|
82
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
34
|
60
|
||||||
5121266393832816569681656646982897
|
897695728994154752385672625781113921437631223164657764585738
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
44
|
47
|
||||||
81585764841332967586694741428675158993386693
|
35839563993964564988114497921613189536194214699
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user