参考:大佬
思路:递归实现
public class Solution { List<String> res = new ArrayList<String>(); String[] list = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; public List<String> letterCombinations(String digits) { if(digits == null || digits.length() == 0) return new ArrayList<String>(); iterStr(digits, "", 0); return res; } public void iterStr(String str, String letter, int index){ if(index == str.length()){ res.add(letter); } int pos = str.charAt(index) - ‘0‘; String help = list[pos]; for (int i = 0; i < help.length(); i++) { iterStr(str, letter + help.substring(i, i+1), index +1); } } }
队列实现
String[] list = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; List<String> res = new ArrayList<String>(); public List<String> letterCombinations(String digits) { if(digits == null || digits.length() == 0) return new ArrayList<String>(); int pos = digits.charAt(0) - ‘0‘; String help = list[pos]; int size = help.length(); for (int i = 0; i < size; i++) { res.add(help.substring(i, i+1)); } for (int i = 1; i < digits.length(); i++) { size = res.size(); pos = digits.charAt(i) - ‘0‘; help = list[pos]; for (int j = 0; j < size; j++) { String op = res.remove(0); for (int k = 0; k < help.length(); k++) { res.add(op + help.substring(k, k + 1)); } } } return res; }
原文:https://www.cnblogs.com/shish/p/13335057.html