[Problem]
Given a digit string, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below.
Input:Digit string "23" Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
[Analysis]
典型的backtracking排列组合的问题,没有tricky的地方。用Iteration或Recursion都可以轻易写出。
[Solution]
import java.util.ArrayList; import java.util.List; public class Solution { public List<String> letterCombinations(String digits) { if (digits == null) { return null; } List<String> result = new ArrayList<String>(); StringBuilder buf = new StringBuilder(); getLetterCombinations(digits, 0, buf, result); return result; } public void getLetterCombinations(String digits, int idx, StringBuilder buf, List<String> result) { if (idx >= digits.length()) { result.add(buf.toString()); } else { String mappings = getMapping(digits.charAt(idx)); for (int i = 0; i < mappings.length(); i++) { StringBuilder newBuf = new StringBuilder(buf); getLetterCombinations(digits, idx + 1, newBuf.append(mappings.charAt(i)), result); } } } public String getMapping(char digit) { switch (digit) { case ‘2‘: return "abc"; case ‘3‘: return "def"; case ‘4‘: return "ghi"; case ‘5‘: return "jkl"; case ‘6‘: return "mno"; case ‘7‘: return "pqrs"; case ‘8‘: return "tuv"; case ‘9‘: return "wxyz"; default: return ""; } } }
时间: 2024-10-22 09:30:59