我看好多人用递归来解题,个人不太喜欢递归,因为感觉递归占用了太多的资源。这次是用普通的方法。
解题思路:
1.首先把数字digits转化成String类型的数组,数组里面存的是数字对应的字母。
2.然后,创建一个List表单result存放结果.
3.将result和String数组里的第一个元素对应组合,并将得到组合再赋值给result,将result与String数组里的第二个元素组合....一直到最后一个元素。
举个例子:
23
将23转化成对应的字母,则2对应abc,3对应def
首先result为空,即 [ ] ,所以result与String数组第一个元素组合得到["a", "b", "c"],将其再赋值给result,然后result与第二个元素组合得到["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]。
代码:
class Solution {
public List<String> letterCombinations(String digits) {
List<String> result = new ArrayList();
if(digits.length() == 0)
return result;
String[] digits2letters = new String[]{"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
result.add("");
for(int i = 0; i < digits.length(); i++){
result = combine(digits2letters[digits.charAt(i) - '0'], result);
}
return result;
}
private List<String> combine(String s, List<String> result){
List<String> newResult = new ArrayList();
for(String str:result){
for(int i = 0; i < s.length(); i++){
newResult.add(str + s.charAt(i));
}
}
return newResult;
}
}