比较能想到的是递归,但递归里面的实现我其实是看了答案才大概清楚的。
首先是方法中传入了一个存放结果的数组,递归方法的开始,我们可以先判断长度是不是等于数字的长度,等于把这个string加入结果集,否则继续下面的操作,取出下一个电话号码的位置, int curPosition = digits.charAt(pre.length()) - '0';找到它对应的字符串,遍历,加入,递归,删除,不断重复。就相当于abc分别处于第一个位置,都计算了一遍。
pre.append(c);
doCombination(pre, res, digits);
pre.deleteCharAt(pre.length() - 1);
代码:
https://github.com/hanleirx/LeetCode/blob/master/17.%20%E7%94%B5%E8%AF%9D%E5%8F%B7%E7%A0%81%E7%9A%84%E5%AD%97%E6%AF%8D%E7%BB%84%E5%90%88
网友评论