解题思路:
当我第一眼看到这题的时候,我直接举出来一个列子“258”,直接套用多重for循环遍历可以罗列出来,但是根据数字组合的长度不能确定for循环的多少(除非把所有for循环个数情况都罗列一遍)
所以只能使用递归遍历。我们可以将电话号码的每个数字映射到一个字母数组中,然后根据输入的电话号码找出可能的组合。
具体步骤如下:
-
创建一个字母映射表,用于将数字映射到对应的字母。例如,可以使用一个数组,数组的索引表示数字,数组的值表示对应的字母字符串。
-
定义一个递归函数Combine,该函数接收四个参数:当前已生成的组合combined_str,当前所在的位置level,输入的电话号码
digits
和字母映射表arr。 -
在递归函数中,首先判断如果当前位置等于电话号码长度,说明已经生成了一个完整的组合,将其添加到结果集中,然后返回。
-
如果当前位置小于电话号码长度(递归的返回条件),则获取当前数字对应的字母串,并进行遍历。对于每个字母,将其添加到当前组合中,然后递归调用Combine函数,将索level加1,继续生成下一个字母的组合。
以下是一个示例的递归函数实现: