3.2 电话号码对应英语单词

原始问题如下:手机上面的数字键均对应了几个字符,譬如2对应了a,b,c。问题是当输入一段数字后,求出所有可能的字符组合

第一种方法:假设电话号码是n个数字,那么就n个for循环。

这方法果断不好

第二个方法:

#include <iostream>
#include <string>

using namespace std;

char c[10][10] =
{
    "",
    "",
    "ABC",
    "DEF",
    "GHI",
    "JKL",
    "MNO",
    "PQRS",
    "TUV",
    "WXYZ",
};

int total[10] = {0, 0, 3, 3, 3, 3, 3, 4, 3, 4};
int tel_length;
int number[10], answer[10];

int main(int argc, const char * argv[]) {
    cin >> tel_length;
    for(int i = 0; i < tel_length; ++i) cin >> number[i];
    memset(answer, 0, sizeof(answer));
    while(true) {
        for (int i = 0; i < tel_length; i++) {
            printf("%c", c[number[i]][answer[i]]);
        }
        puts("\n");
        int k = tel_length-1;
        while(k >= 0) {
            if(answer[k] < total[number[k]] - 1) {
                answer[k]++;
                break;
            } else {
                answer[k] = 0;
                k--;
            }
        }
        if(k < 0) break;
    }
    return 0;
}

第三个方法:回溯法:

#include <iostream>
#include <string>

using namespace std;

char c[10][10] =
{
    "",
    "",
    "ABC",
    "DEF",
    "GHI",
    "JKL",
    "MNO",
    "PQRS",
    "TUV",
    "WXYZ",
};

int total[10] = {0, 0, 3, 3, 3, 3, 3, 4, 3, 4};
int tel_length;
int number[10], answer[10];

void RecursiveSearch(int *number, int *answer, int index, int n) {
    if(index == n) {
        for(int i = 0; i < n; ++i) cout << c[number[i]][answer[i]];
        cout << endl;
        return ;
    } else {
        for (answer[index] = 0; answer[index] < total[number[index]]; answer[index]++) {
            RecursiveSearch(number, answer, index+1, n);
        }
    }
}

int main(int argc, const char * argv[]) {
    cin >> tel_length;
    for(int i = 0; i < tel_length; ++i) cin >> number[i];
    memset(answer, sizeof(answer), 0);
    RecursiveSearch(number, answer, 0, tel_length);
    return 0;
}
时间: 2024-10-02 10:27:17

3.2 电话号码对应英语单词的相关文章

第3章 结构之法——电话号码对应英语单词

电话号码对应英语单词 问题描述 分析与解法 详细代码如下: 1 package chapter3jiegouzhifa.TelephoneMapWords; 2 /** 3 * 电话号码对应英语单词 4 * @author DELL 5 * 6 */ 7 public class TelephoneMapWords1 { 8 private int telLength; //电话号码的位数 9 private char c[][]={ //各个数字所能代表的字符 10 "".toCha

编程之美之电话号码对应英语单词

题目一:根据电话上字母和数字的对应关系,用一个有意义的单词来表述一个电话号码,如用computer表示26678837 题目二:反过来,给定一个电话号码,是否可以用一个单词来表示呢?怎样表示最快呢?显然不是所有的电话号码都可以对应到单词上去 首先来看看leetcode上一个类似的题目: Letter Combinations of a Phone Number Given a digit string, return all possible letter combinations that t

编程之美3.2 电话号码对应英语单词

java实现: import java.util.ArrayList; import java.util.List; public class Telphone { /** * 保存每个数字对应的字母序列 */ static String[] c = new String[] { "", // 0 "", // 1 "abc", // 2 "def", // 3 "ghi", // 4 "jkl&

聊聊程序员如何学习英语单词:写了一个记单词的小程序

背景: 关于英文对程序员的重要性,就不多说了! 英语的学习,有很多,今天也不聊多,只聊英语单词! 关于单词的记忆,找过很多方法,下载过很多软件. 如图(其它不好用的都卸载了): 上图算是我以前用过软件,注意,是以前哦~~~ 意思就是没有坚持下来~~~~ 随时间的推移,最后它们还是被我遗忘了~~~ 为什么???不能:坚持!坚持!坚持! 学习思考: 一直在找方法: 1:下载过联想记忆法.背文章记单词,词根,各种视频~~~ 2:连单词的数据库都网上下载了一份了,期望从数据库的直接记忆单词快些~~~ 通

iOS--苹果API常见英语单词

苹果API常见英语单词0. indicating 决定1.in order to 以便2.rectangle bounds 矩形尺寸3.applied 应用4.entirety 全部5.technique 方法6.truncating 截短7.wrapping 换行8.string 字符串9.familiar style 简体10.The styled text 主题样式11.Constants 常量12.Attribute 属性13.Consecutive 连续14.Shrink 收缩15.D

48个国际英语音标发音表与英语单词的偏旁部首

英语48个国际音标表 元音 20个 单元音 前元音 [i?](一拖长) [?](一) [e] [æ] 中元音 [??](厄拖长) [?]( 厄) [?](啊) 后元音 [u?](屋拖长) [?]( 屋) [??](凹拖长) [?](凹) [ɑ?](啊拖长) 双元音 开合双元音 [e?](A) [a?](爱) [??]( 凹一) [a?](阿-屋) [??]( 欧) 集中双元音 [??](一厄) [e?]( 哀-厄) [??]( 屋-厄) 辅音 28个 爆破音 清辅音 [p] [t] [k] 浊辅

英语单词学习窗体(一)

想背英语单词,于是尝试写个WinForm窗体,将单词录入数据库(好记心不如烂笔头,敲键盘也可以吧,边录入,边记). 1.软件用的是VS2010,首先创建解决方案,创建Windows窗体应用程序: 2.创建一个录入单词的窗体,添加相应的textbox.button.label. 3.我是按照单词本添加的,依次添加英语.汉语.对单词首字母及对应页数中间用.隔开, 相应的Name是txtEnglish.txtChinese.txtMemo,因为要多次用的这里新建了一个StrudyEnglish.Mod

【LeetCode-面试算法经典-Java实现】【017-Letter Combinations of a Phone Number (电话号码上的单词组合)】

[017-Letter Combinations of a Phone Number (电话号码上的单词组合)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given a digit string, return all possible letter combinations that the number could represent. A mapping of digit to letters (just like on the telephone bu

第二学期 英语单词整理-网络方面

<大型企业网络设计及部署> 1.Packet  数据包 2.Count  数值 3.Network  网络 4.Mask    掩码 5.Address  地址 6.Interface  接口 7.Configuration  Register  配置寄存器 8. IOS    互连网络操作系统 9. Model   模块 10.SN (serial number)  产品序列号 11.Type  类型 12.control    控制 13.message   消息 14.protocol