タイトル
住所:
https://leetcode.com/problems/letter-combinations-of-a-phone-number/
描述:
2-9包括から数字を含む文字列を考えると、数が表すことができることをすべての可能な文字の組み合わせを返します。
(ちょうど電話ボタンのような)の文字に数字のマッピングは以下のとおりです。1は、任意の文字にマップされないことに注意してください。
例:
Input: "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
注意:
上記の答えが辞書式順序であるが、あなたの答えは、あなたが望む任意の順序である可能性があります。
すべてのソリューションの配列をこのトピック後戻り液、終了条件を再帰的に注意を払います。
トラバーサルソリューション
注文執行分解:
- 二次元配列の初期化
char[][] map
の関係、デジタルストレージおよび文字は、map[digit - '2']
文字列を取得します。 - 文字列トラバーサル
List
新しい文字(文字列を横断起因する文字)を通ってスプライシング、。
public List<String> letterCombinationWithIterate(String digits) {
List<String> result = new ArrayList<>();
if (digits == null || digits.length() == 0) {
return result;
}
char[][] map = new char[8][];
map[0] = "abc".toCharArray();
map[1] = "def".toCharArray();
map[2] = "ghi".toCharArray();
map[3] = "jkl".toCharArray();
map[4] = "mno".toCharArray();
map[5] = "pqrs".toCharArray();
map[6] = "tuv".toCharArray();
map[7] = "wxyz".toCharArray();
result.add("");
for (char digit: digits.toCharArray()) {
result = append(result, map[digit - '2']);
}
System.out.println("result > " + Arrays.toString(result.toArray()));
return result;
}
private List<String> append(List<String> lastList, char[] charArray) {
List<String> nextList = new ArrayList<>();
for (String s: lastList) {
for (char c: charArray) {
nextList.add(s + c);
}
}
return nextList;
}
バックトラックアルゴリズム
分解をバックトラック:
- 戻る輸出
nextDigits == null || nextDigits.length() == 0
、 combination
これは、モザイクの累積結果であります
Map<Character, String> phone = new HashMap<Character, String>() {{
put('2', "abc");
put('3', "def");
put('4', "ghi");
put('5', "jkl");
put('6', "mno");
put('7', "pqrs");
put('8', "tuv");
put('9', "wxyz");
}};
private List<String> resultList = new ArrayList<>();
public List<String> letterCombinationsWithBacktrack(String digits) {
if (digits == null || digits.length() == 0) {
return resultList;
}
backTrack("", digits);
return resultList;
}
public void backTrack(String combination, String nextDigits) {
if (nextDigits == null || nextDigits.length() == 0) {
resultList.add(combination);
return;
}
char c = nextDigits.charAt(0);
for (char item: phone.get(c).toCharArray()) {
backTrack(combination + item, nextDigits.substring(1));
}
}
ダウンロード
https://github.com/zgpeace/awesome-java-leetcode/blob/master/code/LeetCode/src/backtracking/LetterCombinationsOfAPhoneNumber.java