LeetCode-回溯算法

回溯法有“通用的解题法”之称。应用回溯法求解问题时,首先应该明确 问题的解空间。一个复杂问题的解决往往由多部分构成,即,一个大的解决方案 可以看作是由若干个小的决策组成。很多时候它们构成一个决策序列。解决一个 问题的所有可能的决策序列构成该问题的解空间。解空间中满足约束条件的决策 序列称为可行解。一般说来,求解任何问题都有一个目标,在约束条件下使目标 值达到最大(或最小)的可行解称为该问题的最优解。在解空间中,前 k 项决策 已经取定的所有决策序列之集称为 k 定子解空间。0 定子解空间即是该问题的解 空间。

17. 电话号码的字母组合icon-default.png?t=N7T8https://leetcode.cn/problems/letter-combinations-of-a-phone-number/

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例 1:

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
class Solution {
    List<String> list=new ArrayList<>();//存储答案
    public List<String> letterCombinations(String digits) {
        //判断是否为空输入digits
        if(digits.length()==0||digits==null){
            return list;
        }
        //设置字典
        String[] dic={"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
        // 调用回溯
        backtracking(digits, dic, 0);
        return list;
    }
    //由于答案返回String,回溯过程中需要拼接String
    StringBuilder temp=new StringBuilder();
    /**
     * String digits:输入“23”
     * String[] dic:找到“23”所代表的字符串集合"abc", "def"
     * int index:回溯次数,是否到达叶子结点
     */
    public void backtracking(String digits, String[] dic, int index){
        //回溯出口,并将结果加入结果list
        if(index==digits.length()){
            list.add(temp.toString());
            return;
        }
        //获取每一层字典"abc", "def"
        String str=dic[digits.charAt(index)-'0'];
        //循环遍历"abc", "def"
        for(int i=0; i<str.length();i++){
            temp.append(str.charAt(i));
            //从"abc"取一个后到下一层"def"取一个
            backtracking(digits, dic, index+1);
            //将"def"中添加到temp的删除,回溯尝试新的组合
            temp.deleteCharAt(temp.length()-1);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值