17. 电话号码的字母组合中

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

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

17. 电话号码的字母组合中_第1张图片

示例 1:

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

示例 2:

输入:digits = ""
输出:[]

示例 3:

输入:digits = "2"
输出:["a","b","c"]

提示:

  • 0 <= digits.length <= 4
  • digits[i] 是范围 ['2', '9'] 的一个数字。

 

 vectorvecStr={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};

    vector>visited=vector>(10,vector(4,false));

    void backtrack(vector&ret,string digits,int cur,std::deque&stk,vector>&visited)

    {

        if(stk.size() == digits.size())

        {

            dequetmpStk=stk;

            string str="";

            while(!tmpStk.empty()){

                str = str+ tmpStk.front();

                tmpStk.pop_front();

            }

            if(str!="")

            {

                ret.push_back(str);

            }  

        }

        for(int i=cur;i

        {

            int cTmp=digits[i]-'0';

            string tmpStr=vecStr[cTmp];

            for(int j=0;j

            {

                if(visited[i][j]==true)

                {

                    continue;

                }

                visited[i][j]=true;

                stk.push_back(tmpStr[j]);

                backtrack(ret, digits,i+1,stk,visited);

                visited[i][j]=false;

                stk.pop_back();

            }

        }

    }

    vector letterCombinations(string digits) {

        vectorret;

        dequestk;

        backtrack(ret, digits, 0,stk,visited);

        return ret;

    }

你可能感兴趣的:(算法,javascript,开发语言)