タイトル
文字列が数字だけ2-9が含まれて考えると、それは組み合わせが示されているすべての文字を返すことができます。
(同じ電話キー)、次のように文字にデジタルマップを考えます。注1は任意のアルファベットに対応していません。
例:
入力: "23"
を出力する:. [ "広告"、 " AE"、 "BD"、 "である"、 "BF"、 "CD"、 "CE"、 "CF"、 "AF"]
説明:
上記もののその答えは、辞書式順序に基づいていますが、あなたは答え出力の順序を選択することができます。
出典:滞在ボタン(LeetCode)
:リンクhttps://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。
問題の解決策
全順列の問題、バックトラック。
コード
class Solution {
public static List<String> letterCombinations(String digits) {
if (digits.length() == 0) {
return new ArrayList<>();// 保证空串返回[],而不是[""]
}
HashMap<Character, String> map = new HashMap<>(); //
map.put('2', "abc");
map.put('3', "def");
map.put('4', "ghi");
map.put('5', "jkl");
map.put('6', "mno");
map.put('7', "pqrs");
map.put('8', "tuv");
map.put('9', "wxyz");
List<String> ansList = new ArrayList<>();
traceBack(map, digits, "", 0, ansList);
return ansList;
}
private static void traceBack(HashMap<Character, String> map, String digits, String curStr,
int pos, List<String> ansList) {
if (pos == digits.length()) {//
ansList.add(curStr);
return;
}
String letters = map.get(digits.charAt(pos));
for (int i = 0; i < letters.length(); ++i) {
char letter = letters.charAt(i);
traceBack(map, digits, curStr + letter, pos + 1, ansList);
}
}
}