leetcode-17-回溯
import java.util.ArrayList;
/**
<p>给定一个仅包含数字 <code>2-9</code> 的字符串,返回所有它能表示的字母组合。答案可以按 <strong>任意顺序</strong> 返回。</p>
<p>给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。</p>
<p><img src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2021/11/09/200px-telephone-keypad2svg.png" style="width: 200px;" /></p>
<p> </p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入:</strong>digits = "23"
<strong>输出:</strong>["ad","ae","af","bd","be","bf","cd","ce","cf"]
</pre>
<p><strong>示例 2:</strong></p>
<pre>
<strong>输入:</strong>digits = ""
<strong>输出:</strong>[]
</pre>
<p><strong>示例 3:</strong></p>
<pre>
<strong>输入:</strong>digits = "2"
<strong>输出:</strong>["a","b","c"]
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>0 <= digits.length <= 4</code></li>
<li><code>digits[i]</code> 是范围 <code>['2', '9']</code> 的一个数字。</li>
</ul>
<div><div>Related Topics</div><div><li>哈希表</li><li>字符串</li><li>回溯</li></div></div><br><div><li>👍 2087</li><li>👎 0</li></div>
*/
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public List<String> letterCombinations(String digits) {
if("".equals(digits)){
return new ArrayList<>();
}
Map<Character, String> phoneMap = 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");
}};
List<String> combinations = new ArrayList<>();
backtrack(combinations,phoneMap,digits,0,new StringBuffer());
return combinations;
}
void backtrack(List<String> combinations ,Map<Character,String> phoneMap,String digits,int index,StringBuffer sb){
if(index==digits.length()){
combinations.add(sb.toString());
}else{
char digit = digits.charAt(index);
String letters = phoneMap.get(digit);
for (int i = 0; i < letters.length(); i++) {
sb.append(letters.charAt(i));
backtrack(combinations,phoneMap,digits,index+1,sb);
sb.deleteCharAt(index);
}
}
}
}
//leetcode submit region end(Prohibit modification and deletion)
不恋尘世浮华,不写红尘纷扰