直觉在于解码方式问题的递归解决方案

时间:2019-01-07 05:33:09

标签: python recursion

https://www.geeksforgeeks.org/count-possible-decodings-given-digit-sequence/

在上述问题中,它要求我对给定数字序列的可能解码次数进行计数。

在问题中,1代表“ A”,2代表“ B”,依此类推。给定一个数字序列。

该问题可以递归解决,我们可以针对两个子问题进行递归。

1) If the last digit is non-zero, recur for remaining (n-1) digits and add the result to total count.

2) If the last two digits form a valid character (or smaller than 27), recur for remaining (n-2) digits and add the result to total count.

我确实知道这个主意,但是我不完全理解为什么这样解决。

基于上述解决方案编写的代码为我提供了正确的答案。

def numDecode(s):
    if len(s) == 0 or len(s) == 1: return 1
    count = 0
    if s[n - 1] > '0':
        count = numDecode(s[:n-1])
    if s[n - 2] == '1' or (s[n - 2] == '2' and s[n - 1] < '7'):
        count += rec(s[:n-2])
    return count

但是,我仍然不理解此解决方案背后的直觉。为什么我们从后面开始?为什么我们将它分为两​​个子问题,每个子问题需要最后一位和两位数?

将来解决此类问题的最佳方法是什么?

谢谢!

0 个答案:

没有答案