File tree Expand file tree Collapse file tree 3 files changed +41
-0
lines changed
include/0005_DynamicProgramming
source/0005_DynamicProgramming
test/0005_DynamicProgramming Expand file tree Collapse file tree 3 files changed +41
-0
lines changed Original file line number Diff line number Diff line change @@ -27,5 +27,6 @@ namespace DecodeWays
2727 int CountWaysRecursiveHelper (string& digits, size_t index);
2828 public:
2929 int RecursiveCountWays (string digits);
30+ int DpCountways (string digits);
3031 };
3132}
Original file line number Diff line number Diff line change @@ -32,4 +32,30 @@ namespace DecodeWays
3232 {
3333 return this ->CountWaysRecursiveHelper (digits, 0 );
3434 }
35+
36+ int DynamicProgramming::DpCountways (string digits)
37+ {
38+ size_t digitsLength = digits.size ();
39+
40+ vector<int > dp (digitsLength + 1 , 0 );
41+
42+ dp[digitsLength] = 1 ;
43+
44+ for (int index = digitsLength - 1 ; index >= 0 ; index--)
45+ {
46+ // Single digit decoding: check if current digit is not '0'.
47+ if (digits[index] != ' 0' )
48+ {
49+ dp[index] = dp[index + 1 ];
50+ }
51+
52+ // Two digit decoding: check if next two digits are valid.
53+ if ((index + 1 < digitsLength) && ((digits[index] == ' 1' && digits[index + 1 ] <= ' 9' ) || (digits[index] == ' 2' && digits[index + 1 ] <= ' 6' )))
54+ {
55+ dp[index] += dp[index + 2 ];
56+ }
57+ }
58+
59+ return dp[0 ];
60+ }
3561}
Original file line number Diff line number Diff line change @@ -16,4 +16,18 @@ namespace DecodeWays
1616 // Assert
1717 ASSERT_EQ (expectedWaysCount, actualWaysCount);
1818 }
19+
20+ TEST (DecodeWays, DpTest01)
21+ {
22+ // Arrange
23+ DynamicProgramming dp;
24+ string digits = " 121" ;
25+ int expectedWaysCount = 3 ;
26+
27+ // Act
28+ int actualWaysCount = dp.DpCountways (digits);
29+
30+ // Assert
31+ ASSERT_EQ (expectedWaysCount, actualWaysCount);
32+ }
1933}
You can’t perform that action at this time.
0 commit comments