[经典面试题][百度]电话号码对应英语单词

来源:互联网 发布:电脑看盘软件 编辑:程序博客网 时间:2024/05/15 00:19

题目

现在有一个手机,手机上的键盘上有这样的对应关系,2对应”abc”,3对应”def”…..手机里面有一个userlist用户列表,当我们输入942的时候出来拼音的对应可能是“xia”,“zha”,“xi”,“yi”等,当我们输入9264的时候出来是yang,可能是“样”,“杨”,“往”等,现在我们输入一个字符串数字,比如926等,要在电话簿userlist中查找出对应的用户名和电话号码并返回结果。 C++语言: 电话号码对应的英语单词(注意此题的非递归做法)

来源

百度

代码

    /*-------------------------------------    *   日期:2015-03-30    *   作者:SJF0115    *   题目: 电话号码对应英语单词    *   来源:百度    *   博客:    ------------------------------------*/    #include <iostream>    #include <vector>    using namespace std;    //每个数字键对应的字母个数    vector<int> count = {0,0,3,3,3,3,3,4,3,4};    vector<string> letter = {"","","ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ"};    // phone 电话号码 n 电话号码位数 index    void RecursiveSearch(vector<int> phone,vector<char> &path,int index,int n,vector<vector<char> > &result){        if(index == n){            result.push_back(path);            return;        }//if        int num = phone[index];        for(int i = 0;i < count[num];++i){            path.push_back(letter[num][i]);            RecursiveSearch(phone,path,index+1,n,result);            path.pop_back();        }//for        if(count[num] == 0){            RecursiveSearch(phone,path,index+1,n,result);        }//if    }    // 非递归    vector<vector<char> > NoRecursiveSearch(vector<int> phone){        vector<vector<char> > result;        vector<char> path;        int size = phone.size();        if(size <= 0){            return result;        }//if        // 数字键目前所代表的字符在所能代表的字符集中的位置        vector<int> answer(size,0);        while(true){            for(int i = 0;i < size;++i){                path.push_back(letter[phone[i]][answer[i]]);            }//for            result.push_back(path);            path.clear();            int k = size - 1;            // 每一个数字对应的字母位置            while(k >= 0){                if(answer[k] < count[phone[k]] - 1){                    answer[k]++;                    break;                }//if                else{                    answer[k] = 0;                    k--;                }//else            }//while            if(k < 0){                break;            }//if        }//while    }    // 打印    void Print(vector<vector<char> > result){        for(int i = 0;i < result.size();++i){            for(int j = 0;j < result[i].size();++j){                cout<<result[i][j];            }//for            cout<<endl;        }//for    }    int main(){        vector<vector<char> > result;        vector<char> path;        vector<int> phone = {3,2,4};        RecursiveSearch(phone,path,0,phone.size(),result);        Print(result);        cout<<endl;        result = NoRecursiveSearch(phone);        Print(result);    }
1 0
原创粉丝点击