zoukankan      html  css  js  c++  java
  • Careercup

    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, ''));
    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 }
  • 相关阅读:
    android应用私有存储文件的写入与读取-openFileInput 和 openFileOutput
    android 8种对话框(Dialog)使用方法汇总
    Gradle环境变量的配置
    Activity标题(title)的显示和隐藏
    Android Studio配置Android Annotations框架详解--说说那些坑
    Android如何防止apk程序被反编译
    Android APK反编译 apktool使用教程
    关于Installation error: INSTALL_FAILED_NO_MATCHING_ABIS的解决方法
    Android解决NDK not configured问题
    Android SDK在线更新镜像服务器
  • 原文地址:https://www.cnblogs.com/zhuli19901106/p/3703762.html
Copyright © 2011-2022 走看看