17-电话号码的字母组合

这道题是我刷题所遇到的第一道递归题,由此可见以前有多么水.....

由于golang才学一个月左右,有些语法并不熟悉,所以这里全局变量最初不知道怎么声明,记下来 var( )   在括号里面声明整个包都能使用的变量,还要注意这里不能使用 :=  而是使用 =  ,效果只有在这里是一样的,如果是在函数内则一个表示声明,一个表示赋值了。

 

声明一个值为数组的map是这样声明的,maps := make(map[string][]string)  接下来就是正式和这道题有关的了

 

第一眼看到这个题,直接for开始搞啊,两个还好弄,三个呢,假如len(digits)== 9 呢?那岂不是要9个for循环,这还得了,想了很久实在不知道咋弄,去看了题解提到了递归,这下没办法,躲不过了,只能去学习递归。

自我理解递归的要点就是边界值是要做特殊处理,其他情况则都是一样的处理,递归的下一步都要依赖当前这一步。比如这里我要得到长度为len(digits)的所有字母组合,那么我可以先去获取当长度为len(digits)-1时的字母组合,然后再和这一步的字符组合在一起。代码如下: