leetcode 17. Letter Combinations of a Phone Number

来源:互联网 发布:淘宝怎样退换货 编辑:程序博客网 时间:2024/05/21 10:09


1.题目

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.

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.


2.思路

1)有两个digits时,例如“23“,那么相应的字符为”a,b,c“,”d,e,f“。

     两层循环,构成组合"ad","ae","af","bd","be","bf","cd","ce","cf"

2)有大于两个digits时,例如”234“,

    那么先将前两个数字”23“,利用 1)中的方法,组合,结果存为result。

    再将result和下一个数字 ,再利用 1)的方法,组合,直至数字字符串结束。


class Solution {public:    vector<string> letterCombinations(string digits) {        vector<string>result;        number['2']={'a','b','c'};        number['3']={'d','e','f'};        number['4']={'g','h','i'};        number['5']={'j','k','l'};        number['6']={'m','n','o'};        number['7']={'p','q','r','s'};        number['8']={'t','u','v'};        number['9']={'w','x','y','z'};        if(digits.length()==0) return result;        for(int i=0;i<digits.length();i++)            help(result,digits[i]);        return result;    }    void help(vector<string>&result,char digit){        vector<string>temp;        if(result.size()==0){                        for(int j=0;j<number[digit].size();j++)                {string tt;                tt=tt+number[digit][j];                temp.push_back(tt);}                result=temp;                return;        }        for(int i=0;i<result.size();i++){            for(int j=0;j<number[digit].size();j++)                temp.push_back(result[i]+number[digit][j]);        }        result=temp;    }    private:            unordered_map<char,vector<char>>number;};


0 0
原创粉丝点击