Code360 powered by Coding Ninjas X Naukri.com. Code360 powered by Coding
Ninjas X Naukri.com

Problem of the day

A message containing letters from A-Z can be encoded into numbers using the following mapping:

```
'A' -> "1"
'B' -> "2"
...
'Z' -> "26"
```

To decode an encoded message, all the digits must be grouped then mapped back into letters using the reverse of the mapping above (there may be multiple ways).

Given a string ‘S’ containing only digits, return the number of ways to decode it.

```
Input: ‘S’ = "11106"
Output: 2
The possible ways are:-
(1 1 10 6),
(11 10 6)
Note that the grouping (1 11 06) is invalid because "06" cannot be mapped into 'F' since "6" is different from "06".
```

Detailed explanation

```
The first line contains ‘T’, denoting the number of test cases.
Each test case's first and only line contains the string ‘S’.
```

```
Return the number of ways to decode the string ‘S’.
```

```
You don't need to print anything. It has already been taken care of. Just implement the given function.
```

```
1 <= T <= 10
1 <= | S | <= 100
Time Limit: 1 sec
```

```
2
12
226
```

```
2
3
```

```
For the first test case:-
"12" could be decoded as "AB" (1 2) or "L" (12).
For the second test case:-
"226" could be decoded as "BZ" (2 26), "VF" (22 6), or "BBF" (2 2 6).
```

```
2
1234
333
```

```
3
1
```

Hint

Think of the possible choices you might make and try to solve them with the help of recursion.

Approaches

Recursion

**Function numDecodingsUtil( string S, int i, int N )**

- First, write the base cases:
- if i<’N’ && S[i]==’0’, return 0.
- If i>= ’N’, return 1.

- Then, declare and initialize a variable ‘ways’ to 0.
- Go for option 1. Call the numDecodingsUtil function for index i+1 again and add the returned value to ‘ways’.
- For option 2, check if we can take (i+1)th character. For that check if ((i+1)<n && ((S[i] == '1' && S[i] <= '9') || (S[i]=='2' && S[i+1] < '7'))), i.e., if it lies inside the string and also in the range [10, 26]. If yes, go for option 2, call numDecodingsUtil for index i+2 again and add the returned value to ‘ways’.

- At last, return ‘ways’.

**Function numDecodings(string S):**

- call numDecodingsUtil with index as 0 and length of ‘S’.

Time Complexity

**O(2^N), where ‘N’ is the length of the string ‘S’.**

In the worst case, for each index i, we can maximum make 2 recursion calls for each i. Thus the complexity will be exponential and equal to O(2^N).

**Hence, the time complexity is O(2^N).**

Space Complexity

**O( N ), where ‘N’ is the length of the string ‘S’.**

In the worst case, the extra space used by the recursion stack can go up to a maximum depth of ‘N’. Hence the space complexity is O(N).

**Hence the space complexity is O( N ).**

Code Solution

(100% EXP penalty)

DECODE STRING