Skip to content

Commit f548505

Browse files
committed
feature: decode way dp sol added
1 parent b2c83c4 commit f548505

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

include/0005_DynamicProgramming/0007_DecodeWays.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff 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
}

source/0005_DynamicProgramming/0007_DecodeWays.cc

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff 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
}

test/0005_DynamicProgramming/0007_DecodeWaysTest.cc

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff 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
}

0 commit comments

Comments
 (0)