Careercup - Facebook面试题 - 5765850736885760

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 }

 

你可能感兴趣的:(Facebook)