看不清的同学可自行到LeetCode搜索一下题目"Decode Ways II"。从这道题的描述我们得知,题目给了一个字母到数字的映射规则,即A到1、B到2,… Z到26。这里面要注意数字0。题目还说,编码后的数字还可以包含星号,但是星号只匹配1到9,不匹配0。这一点要是不仔细阅读题目,很容易忽略,最后导致Wrong Answer。现在输入是编码后的数字串,问有多少种字母串可以与它匹配。题目后面还举了几个例子,都是很重要的信息,阅读的时候都要留意。
4. 初步分析读完题目之后,我们了解了题目的输入是什么、输出是什么。这个时候,大多数情况下,我们的状态是茫然无措,不知道从何处下手。这是完全正常的,否则,一读完题目就知道怎么做,那只能说明这道题目对于我们的锻炼价值不大。所谓锻炼,就是要让自己去完成高出自己现有水平的挑战任务,当克服了各种障碍,解决了这个挑战,我们的水平才会提高。
那么应该如何下手呢?数学归纳法给我们灵感,任何问题,我们都可以从最简单的情况开始,科学家也是这样做科学研究的。记住,遇到不太会的问题,首先去研究它最简单的情况。
对于这个问题,最简单的情况即字符串长度等于1的情况,即只有一个数或星号。对于这种最简单情况,我们可以人工分析出它的解,如下图所示。
那长度等于1的情况我们明白了,长度等于2呢?还是可以人工分析出来,因为每个位置可出现3种字符,0或1-9或*,情况有9种,如下图所示(A代表1-9)。
现在长度等于2的情况已经比较复杂了,所以我们单独写一个函数处理它,情况划分比较复杂,具体见代码解释。