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
但是,我仍然不理解此解决方案背后的直觉。为什么我们从后面开始?为什么我们将它分为两个子问题,每个子问题需要最后一位和两位数?
将来解决此类问题的最佳方法是什么?
谢谢!