2014-05-02 10:07

题目链接

原题:

Mapping 
'1' = 'A','B','C' 
'2' = 'D','E','F' 
... 
'9' = 

input: 112 
output :ouput = [AAD, BBD, CCD, AAE, AAF, BBE, BBF, CCE, CCF]

题目:电话的数字按键和字母有个映射关系,给定一串数字,请给出所有可能的字符映射方式。

解法:此人也不给个描述,搞的下面一堆人来猜题意。这个题目的意思是说,对于给定的数字串,有多少种不同的映射方式。像“112” -> “ABD”这样是不允许的,因为“1”只能表示一种字母,不能同时表示“A”和“B”。

代码:

 1 // http://www.careercup.com/question?id=5765850736885760
 2 #include <iostream>
 3 #include <string>
 4 #include <vector>
 5 using namespace std;
 6 
 7 void DFS(int idx, vector<pair<int, char> > &dict, vector<string> &result, const string &s)
 8 {
 9     int i;
10     
11     if (idx == (int)dict.size()) {
12         static char m[10];
13         
14         for (i = 0; i < (int)dict.size(); ++i) {
15             m[dict[i].first] = dict[i].second;
16         }
17         
18         static string res;
19         
20         res.clear();
21         for (i = 0; i < (int)s.length(); ++i) {
22             res.push_back(m[s[i] - '1']);
23         }
24         
25         result.push_back(res);
26         return;
27     }
28     
29     switch(dict[idx].first) {
30     case 0:
31     case 1:
32     case 2:
33     case 3:
34     case 4:
35     case 5:
36     case 6:
37     case 7:
38         for (i = 0; i < 3; ++i) {
39             dict[idx].second = (dict[idx].first * 3 + i) + 'A';
40             DFS(idx + 1, dict, result, s);
41         }
42         break;
43     case 8:
44         for (i = 0; i < 2; ++i) {
45             dict[idx].second = (dict[idx].first * 3 + i) + 'A';
46             DFS(idx + 1, dict, result, s);
47         }
48         break;
49     }
50 }
51 
52 int main()
53 {
54     int i;
55     string s;
56     vector<pair<int, char> > dict;
57     vector<string> result;
58     int a[10];
59     
60     while (cin >> s) {
61         for (i = 0; i < 10; ++i) {
62             a[i] = 0;
63         }
64         for (i = 0; i < (int)s.length(); ++i) {
65             a[s[i] - '1'] = 1;
66         }
67         
68         for (i = 0; i < 10; ++i) {
69             if (a[i]) {
70                 dict.push_back(make_pair(i, '\0'));
71             }
72         }
73         
74         DFS(0, dict, result, s);
75         cout << "{" << endl;
76         for (i = 0; i < (int)result.size(); ++i) {
77             cout << "    " << result[i] << endl;
78         }
79         cout << "}" << endl;
80         
81         dict.clear();
82         result.clear();
83     }
84     
85     return 0;
86 }

 

 posted on 2014-05-02 10:40  zhuli19901106  阅读(315)  评论(0编辑  收藏  举报