LeetCode-017-電話號碼的字母組合
阿新 • • 發佈:2021-06-22
電話號碼的字母組合
題目描述:給定一個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。答案可以按 任意順序 返回。
給出數字到字母的對映如下(與電話按鍵相同)。注意 1 不對應任何字母。
示例說明請見LeetCode官網。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
解法一:解法一
首先,將所有的對映列出來mappings,然後,遍歷digits中的每一個字元,從mappings中取出對應的字母,拼到一起,最終遍歷完後把結果放到結果集裡面,返回。
import java.util.*; public class Solution { private static Map<Integer, List<Character>> mappings = new HashMap<>(); static { mappings.put(2, new ArrayList<>(Arrays.asList('a', 'b', 'c'))); mappings.put(3, new ArrayList<>(Arrays.asList('d', 'e', 'f'))); mappings.put(4, new ArrayList<>(Arrays.asList('g', 'h', 'i'))); mappings.put(5, new ArrayList<>(Arrays.asList('j', 'k', 'l'))); mappings.put(6, new ArrayList<>(Arrays.asList('m', 'n', 'o'))); mappings.put(7, new ArrayList<>(Arrays.asList('p', 'q', 'r', 's'))); mappings.put(8, new ArrayList<>(Arrays.asList('t', 'u', 'v'))); mappings.put(9, new ArrayList<>(Arrays.asList('w', 'x', 'y', 'z'))); } public static List<String> letterCombinations(String digits) { if (digits == null || digits.length() == 0) { return new ArrayList<>(); } Set<String> result = new HashSet<>(); for (Character temp : mappings.get(Integer.valueOf(String.valueOf(digits.charAt(0))))) { result.add(temp.toString()); } for (int i = 1; i < digits.length(); i++) { Set<String> tempResult = result; result = new HashSet<>(); for (String s : tempResult) { for (Character character : mappings.get(Integer.valueOf(String.valueOf(digits.charAt(i))))) { if (!result.contains(s + character)) { result.add(s + character); } } } } return new ArrayList<>(result); } public static void main(String[] args) { List<String> strings = letterCombinations("2"); for (String string : strings) { System.out.print(string + "--"); } } }
【每日寄語】睡去昨天的疲憊,忘卻昨天的煩惱,睜開今天的雙眼,開啟今天的美好。