zoukankan      html  css  js  c++  java
  • 【LeetCode-回溯】*的字母组合

    题目描述

    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
    给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

    示例:

    输入:"23"
    输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
    

    题目链接: https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/
    做这题之前可以先做一下全排列子集

    思路

    使用回溯。类似于人做这种问题的方法,首先将数字转为字符串放到数组里面,例"23"转为数组["ad", "ae"],然后从数组中的第一个字符串开始递归,递归的树如下:

    代码如下:

    class Solution {
    public:
        vector<string> letterCombinations(string digits) {
            if(digits.empty()) return {};
    
            map<char, string> dict({{'2',"abc"},{'3',"def"},{'4',"ghi"},{'5',"jkl"},{'6',"mno"},
                                   {'7',"pqrs"},{'8',"tuv"},{'9',"wxyz"}});
            
            vector<string> v;
            for(int i=0; i<digits.size(); i++){
                v.push_back(dict[digits[i]]);
            }
    
            string track = "";
            vector<string> ans;
            dfs(v, 0, track, ans);
            return ans; 
        }
    
        void dfs(vector<string> v, int start, string track, vector<string>& ans){
            if(track.length()==v.size()){
                ans.push_back(track);
                return;
            }
    
            for(int i=start; i<v.size(); i++){
                for(int j=0; j<v[i].length(); j++){
                    track += v[i][j];
                    dfs(v, i+1, track, ans);
                    track.pop_back();
                }
            }
        }
    };
    
  • 相关阅读:
    2017年期末获奖名单
    2018-01-17作业
    3.2.4 条件表达式
    3.2.3if语句的嵌套2
    if嵌套语句--作业题
    软工第四次作业
    软工第五次作业-结对
    软工第三次作业
    软工第二次作业——数独
    软工实践2017年第一次作业
  • 原文地址:https://www.cnblogs.com/flix/p/12773106.html
Copyright © 2011-2022 走看看