leetcode-17-回溯


import java.util.ArrayList;

/**
<p>给定一个仅包含数字&nbsp;<code>2-9</code>&nbsp;的字符串,返回所有它能表示的字母组合。答案可以按 <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>&nbsp;</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>&nbsp;</p>

<p><strong>提示:</strong></p>

<ul>
	<li><code>0 &lt;= digits.length &lt;= 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)

posted @ 2022-09-02 17:04  小傻孩丶儿  阅读(13)  评论(0编辑  收藏  举报