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

题目

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

来源

百度

代码

/*————————————-* 日期:2015-03-30* 作者:SJF0115* 题目: 电话号码对应英语单词* 来源:百度* 博客:————————————*/;//每个数字键对应的字母个数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 电话号码位数 indexvoid RecursiveSearch(vector<int> phone,vector<char> &path,int index,int n,vector<vector<char> > &result){if(index == n){result.push_back(path);return;}//ifint 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();}//forif(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;}<int> answer(size,0);while(true){for(int i = 0;i < size;++i){path.push_back(letter[phone[i]][answer[i]]);}//forresult.push_back(path);path.clear();int k = size – 1;// 每一个数字对应的字母位置while(k >= 0){if(answer[k] < count[phone[k]] – 1){answer[k]++;break;}//ifelse{answer[k] = 0;k–;}//else}//whileif(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];}//forcout<<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);}

往往为了自己的不能失败,而处心积虑前怕狼后怕虎,

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

相关文章:

你感兴趣的文章:

标签云: