Number of ways to Decode a String [Recursion to DP]
up vote
0
down vote
favorite
I'm working on problem 91 on Leetcode.com called Decode Ways and I've successfully managed to get a working recusive solution but it results in Time Limited Exceeded(TLE). I'm new to utilizing memoization and I've been unable to discover how to properly memoize my results at each resursive step and check if I've already solve the sub-problem
How do I properly store my calculated results to 'evolve' my code from recursion to DP?
Prompt:
A message containing letters from A-Z is being encoded to numbers using the following mapping:
'A' -> 1
'B' -> 2
...
'Z' -> 26
Given a non-empty string containing only digits, determine the total number of ways to decode it.
Working Code (TLE):
public int NumDecodings(string s)
{
if (s == null || s.Length == 0) return 0;
// int dp = new int[s.Length + 1];
// for (int i = 0; i < dp.Length; ++i) dp[i] = -1;
// dp[0] = 1;
// dp[1] = Decode(s, 0, 1, dp) + Decode(s, 0, 2, dp);
int jump1 = Decode(s, 0, 1);
int jump2 = Decode(s, 0, 2);
return jump1 + jump2;
// return dp[1];
}
public int Decode(string s, int i, int len)
{
if (i + len - 1 >= s.Length)
return 0;
// if (dp[i] > -1)
// return dp[i];
int sub = Convert.ToInt32(s.Substring(i, len));
if (sub > 26 || sub < 1 || s.Substring(i, len)[0] == '0')
return 0;
else if (i + len - 1 == s.Length - 1 && sub < 27 && sub > 0)
return 1;
int jump1 = i + len - 1 + 1 < s.Length ? Decode(s, i + len, 1) : 0;
int jump2 = i + len - 1 + 2 < s.Length ? Decode(s, i + len, 2) : 0;
// dp[i] = jump1 + jump2;
return jump1 + jump2;
// return dp[i];
}
c# recursion dynamic-programming
add a comment |
up vote
0
down vote
favorite
I'm working on problem 91 on Leetcode.com called Decode Ways and I've successfully managed to get a working recusive solution but it results in Time Limited Exceeded(TLE). I'm new to utilizing memoization and I've been unable to discover how to properly memoize my results at each resursive step and check if I've already solve the sub-problem
How do I properly store my calculated results to 'evolve' my code from recursion to DP?
Prompt:
A message containing letters from A-Z is being encoded to numbers using the following mapping:
'A' -> 1
'B' -> 2
...
'Z' -> 26
Given a non-empty string containing only digits, determine the total number of ways to decode it.
Working Code (TLE):
public int NumDecodings(string s)
{
if (s == null || s.Length == 0) return 0;
// int dp = new int[s.Length + 1];
// for (int i = 0; i < dp.Length; ++i) dp[i] = -1;
// dp[0] = 1;
// dp[1] = Decode(s, 0, 1, dp) + Decode(s, 0, 2, dp);
int jump1 = Decode(s, 0, 1);
int jump2 = Decode(s, 0, 2);
return jump1 + jump2;
// return dp[1];
}
public int Decode(string s, int i, int len)
{
if (i + len - 1 >= s.Length)
return 0;
// if (dp[i] > -1)
// return dp[i];
int sub = Convert.ToInt32(s.Substring(i, len));
if (sub > 26 || sub < 1 || s.Substring(i, len)[0] == '0')
return 0;
else if (i + len - 1 == s.Length - 1 && sub < 27 && sub > 0)
return 1;
int jump1 = i + len - 1 + 1 < s.Length ? Decode(s, i + len, 1) : 0;
int jump2 = i + len - 1 + 2 < s.Length ? Decode(s, i + len, 2) : 0;
// dp[i] = jump1 + jump2;
return jump1 + jump2;
// return dp[i];
}
c# recursion dynamic-programming
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I'm working on problem 91 on Leetcode.com called Decode Ways and I've successfully managed to get a working recusive solution but it results in Time Limited Exceeded(TLE). I'm new to utilizing memoization and I've been unable to discover how to properly memoize my results at each resursive step and check if I've already solve the sub-problem
How do I properly store my calculated results to 'evolve' my code from recursion to DP?
Prompt:
A message containing letters from A-Z is being encoded to numbers using the following mapping:
'A' -> 1
'B' -> 2
...
'Z' -> 26
Given a non-empty string containing only digits, determine the total number of ways to decode it.
Working Code (TLE):
public int NumDecodings(string s)
{
if (s == null || s.Length == 0) return 0;
// int dp = new int[s.Length + 1];
// for (int i = 0; i < dp.Length; ++i) dp[i] = -1;
// dp[0] = 1;
// dp[1] = Decode(s, 0, 1, dp) + Decode(s, 0, 2, dp);
int jump1 = Decode(s, 0, 1);
int jump2 = Decode(s, 0, 2);
return jump1 + jump2;
// return dp[1];
}
public int Decode(string s, int i, int len)
{
if (i + len - 1 >= s.Length)
return 0;
// if (dp[i] > -1)
// return dp[i];
int sub = Convert.ToInt32(s.Substring(i, len));
if (sub > 26 || sub < 1 || s.Substring(i, len)[0] == '0')
return 0;
else if (i + len - 1 == s.Length - 1 && sub < 27 && sub > 0)
return 1;
int jump1 = i + len - 1 + 1 < s.Length ? Decode(s, i + len, 1) : 0;
int jump2 = i + len - 1 + 2 < s.Length ? Decode(s, i + len, 2) : 0;
// dp[i] = jump1 + jump2;
return jump1 + jump2;
// return dp[i];
}
c# recursion dynamic-programming
I'm working on problem 91 on Leetcode.com called Decode Ways and I've successfully managed to get a working recusive solution but it results in Time Limited Exceeded(TLE). I'm new to utilizing memoization and I've been unable to discover how to properly memoize my results at each resursive step and check if I've already solve the sub-problem
How do I properly store my calculated results to 'evolve' my code from recursion to DP?
Prompt:
A message containing letters from A-Z is being encoded to numbers using the following mapping:
'A' -> 1
'B' -> 2
...
'Z' -> 26
Given a non-empty string containing only digits, determine the total number of ways to decode it.
Working Code (TLE):
public int NumDecodings(string s)
{
if (s == null || s.Length == 0) return 0;
// int dp = new int[s.Length + 1];
// for (int i = 0; i < dp.Length; ++i) dp[i] = -1;
// dp[0] = 1;
// dp[1] = Decode(s, 0, 1, dp) + Decode(s, 0, 2, dp);
int jump1 = Decode(s, 0, 1);
int jump2 = Decode(s, 0, 2);
return jump1 + jump2;
// return dp[1];
}
public int Decode(string s, int i, int len)
{
if (i + len - 1 >= s.Length)
return 0;
// if (dp[i] > -1)
// return dp[i];
int sub = Convert.ToInt32(s.Substring(i, len));
if (sub > 26 || sub < 1 || s.Substring(i, len)[0] == '0')
return 0;
else if (i + len - 1 == s.Length - 1 && sub < 27 && sub > 0)
return 1;
int jump1 = i + len - 1 + 1 < s.Length ? Decode(s, i + len, 1) : 0;
int jump2 = i + len - 1 + 2 < s.Length ? Decode(s, i + len, 2) : 0;
// dp[i] = jump1 + jump2;
return jump1 + jump2;
// return dp[i];
}
c# recursion dynamic-programming
c# recursion dynamic-programming
asked 18 mins ago
springathing
286
286
add a comment |
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f208849%2fnumber-of-ways-to-decode-a-string-recursion-to-dp%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown