码迷,mamicode.com
首页 > 其他好文 > 详细

Letter Combinations of a Phone Number(带for循环的DFS,递归总结)

时间:2014-11-19 12:05:22      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   io   ar   color   os   sp   

Given a digit string, return all possible letter combinations that the number could represent.

A mapping of digit to letters (just like on the telephone buttons) is given below.

bubuko.com,布布扣

Input:Digit string "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.

又加深了对DFS的认识,在递归函数中,需要把握几个点,总能各个击破。

1.就是变化的量要作为参数来传递,这样也就是每个函数在自己的栈中都有该局部变量,这样就可以在回溯到某个点的时候,他的局部变量不会消失。

2.一般的终止条件中,计算结果

代码:

private:
    map<char, vector<char> > dict;
    vector<string> ret;
    int len;
public:
    void createDict()
    {
        dict.clear();
        dict[2].push_back(a);
        dict[2].push_back(b);
        dict[2].push_back(c);
        dict[3].push_back(d);
        dict[3].push_back(e);
        dict[3].push_back(f);
        dict[4].push_back(g);
        dict[4].push_back(h);
        dict[4].push_back(i);
        dict[5].push_back(j);
        dict[5].push_back(k);
        dict[5].push_back(l);
        dict[6].push_back(m);
        dict[6].push_back(n);
        dict[6].push_back(o);
        dict[7].push_back(p);
        dict[7].push_back(q);
        dict[7].push_back(r);
        dict[7].push_back(s);
        dict[8].push_back(t);
        dict[8].push_back(u);
        dict[8].push_back(v);
        dict[9].push_back(w);
        dict[9].push_back(x);
        dict[9].push_back(y);
        dict[9].push_back(z);
    }
    void dfs(int loc,string digits,string temp)
    {
        if(loc==len){
            ret.push_back(temp);
            //temp.erase(temp.size()-1);在这里擦除是没有用的,这已经是下一个递归函数,回溯到上一个的时候,它的局部变量temp还是三个字母
            return;
        }
        for (int i=0;i<dict[digits[loc]].size();++i)
        {
            temp.push_back(dict[digits[loc]][i]);
            dfs(loc+1,digits,temp);
            temp.erase(temp.size()-1);
        }
    }
    vector<string> letterCombinations(string digits) {
        createDict();
        vector<string> tempres;
        tempres.push_back("");
        if(digits.empty()) return tempres;
        len=digits.size();
        dfs(0,digits,"");
        return ret;
    }
};
int main()
{
    //freopen("C:\\Users\\Administrator\\Desktop\\a.txt","r",stdin);
    Solution so;
    so.letterCombinations("258");
    return 0;
}

 

Letter Combinations of a Phone Number(带for循环的DFS,递归总结)

标签:des   style   blog   http   io   ar   color   os   sp   

原文地址:http://www.cnblogs.com/fightformylife/p/4107640.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!