本文共 1957 字,大约阅读时间需要 6 分钟。
为了解决这个问题,我们需要生成一个给定数字字符串可能代表的所有字母组合。每个数字对应电话键盘上的特定字母。我们可以使用迭代的方法来逐步生成这些组合。
这种方法使用迭代的方式逐步生成组合,避免了递归可能带来的性能问题,且代码结构清晰易懂。
import java.util.ArrayList;import java.util.List;public class LetterCombinations { private static final String[] MAPPING = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; public static List letterCombinations(String digits) { List queue = new ArrayList<>(); if (digits == null || digits.isEmpty()) { return queue; } // 检查每个字符是否是2-9 for (int i = 0; i < digits.length(); i++) { char c = digits.charAt(i); if (c < '2' || c > '9') { return new ArrayList<>(); // 返回空列表处理非法字符 } } queue.add(""); for (int i = 0; i < digits.length(); i++) { int digit = Character.getNumericValue(digits.charAt(i)); String letters = MAPPING[digit - 2]; List newQueue = new ArrayList<>(); for (String s : queue) { for (char ch : letters.toCharArray()) { newQueue.add(s + ch); } } queue = newQueue; } return queue; } public static void main(String[] args) { // 测试用例 String input = "23"; System.out.println("输入: " + input); List result = letterCombinations(input); System.out.println("输出: " + result); }} MAPPING,每个数字对应其字母组合。这种方法高效且简洁,能够正确生成所有可能的字母组合。
转载地址:http://doyyz.baihongyu.com/