leetcode17.电话号码的字母组合--回溯方法

做第十七题的时候第一时间想到的是用vector存放字符串,但是没有unordered_map好用节省空间,而且还需要将字符串转换为整数
字符转换为整数最方便的方法就是char - ‘0’,例如:‘9’ - ‘0’ = 9
回溯的方法很简单,就是通过for循环加上递归的方法,这样很好的解决了种类太多的问题。
同样需要注意的问题就是在使用point对字符串进行定位的时候不要直接对point进行加减,这样会改变point的值,回溯过程中会收到很大影响

class Solution {
private:
    // vector<vector<char>> letters = {
    //     {'a','b','c'},
    //     {'d','e','f'},
    //     {'g','h','i'},
    //     {'j','k','l'},
    //     {'m','n','o'},
    //     {'p','q','r','s'},
    //     {'t','u','v'},
    //     {'w','x','y','z'}
    // };
    unordered_map <char, string>letters = {
        {'2',"abc"},
        {'3',"def"},
        {'4',"ghi"},
        {'5',"jkl"},
        {'6',"mno"},
        {'7',"pqrs"},
        {'8',"tuv"},
        {'9',"wxyz"}
    };

public:
//第一次尝试使用的方法
    // vector<string> get(vector<string>input,int num)
    // {
    //     vector<string> output;
    //     output.swap(input);
    //     int len = output.size();
    //     for(char & x: letters[num])
    //     {
    //         if(len == 0)
    //         {
    //             string ans;
    //             output.push_back(ans + x);
    //         }
    //         else
    //         {
    //             for(string & y : output)
    //             {
    //                 string ans;
    //                 ans = y + x;
    //                 input.push_back(ans);
    //             }
    //         }            
    //     }
    //     if(len == 0)
    //         return output;
    //     else 
    //         return input;
    // }
    void get(int point, int dig, vector<string> &output,string digits,string ornal)
    {
        char part = digits[point];
        string letter = letters.at(part);
        for(char & x : letter)
        {
            string ans = ornal + x;
            if(point == dig - 1)
            {
                output.push_back(ans);
            }            
            else
            {
                get(point + 1, dig, output,digits, ans);
            }        
        }
    }
    vector<string> letterCombinations(string digits) {
        vector<string> output;
        int digLen = digits.size();
        if(digLen == 0)
            return output;
        string ornal;
        get(0, digLen, output,digits,ornal);
        return output;
    };
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值