这也是一道很常见的题目,好多类似的题目用的也是同样的解法,这道题目的意思是,我们的手机上的数字键上面对应着英文字母,那么这个数字可能对应3个,也可能对应4个,也有可能对应0个,那么,当我输入一串数字后,需要给出所有这些数字可能对应的英文字母。

      说到这里,相信大家也就明白了,这其实就是全排列,只不过我们首先需要给出已知条件,即数字对应着哪些字母,对应着几个字母,因为要做全排列,就一定要知道一个范围,所以,利用全排列的思想,我们很容易写出如下的代码:

      函数声明:

/*3.2 电话号码对应英语字母*/
void DutNumberToAlphabet(int*, int);
void DutNumberToAlphabet(int*, int, char*, int, int*);

      源代码:

char c[][10] = {"","","ABC","DEF","GHI","JKL","MNO","PQRS","TUV","WXYZ"};//存储各个数字所能代表的字符
int total[10] = {0, 0, 3, 3, 3, 3, 3, 4, 3, 4}; //各个数组所能代表的字符总数
void DutNumberToAlphabet(int* number, int size)
{if (!number || size <= 0)return;char* result = new char[size];int* answer = new int[size];memset(answer, 0, sizeof(int) * size);DutNumberToAlphabet(number, size, result, /*index*/0, answer);
}void DutNumberToAlphabet(int* number, int size, char* result, int index, int* answer)
{if (index == size){for (int i = 0; i < size; ++i)cout << c[number[i]][answer[i]];cout << endl;}else{for (answer[index] = 0; answer[index] < total[number[index]]; ++answer[index])DutNumberToAlphabet(number, size, result, index + 1, answer);}
}


编程之美3.2 电话号码对应英语字母相关推荐

  1. 编程之美2.10:寻找数组中的最大值和最小值

    编程之美2.10: 对于一个有N个整数组成的数组,需要比较多少次才能把最大值和最小值找出来呢? 算法的思想是: 分而治之 测试数据:---------------------------------- ...

  2. 编程之美2.1 求二进制中1的个数

    最近一段的时间,一直在看编程之美之类的算法书籍,刚开始看编程之美,感觉到难度太大,有时候也不愿意去翻动这本书,不过,经过一段时间的修炼,我也彻底的喜欢上这本书了, 书中的算法涉及到很多方面,树,链表, ...

  3. 2017“编程之美”终章:AI之战勇者为王

    编者按:8月15日,第六届微软"编程之美"挑战赛在选手的火热比拼中圆满落下帷幕."编程之美"挑战赛是由微软主办,面向高校学生开展的大型编程比赛.自2012年起, ...

  4. Java 并发编程之美:并发编程高级篇之一-chat

    借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...

  5. Java 并发编程之美:并发编程高级篇之一

    借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...

  6. 编程之美:编程判断两个链表是否相交

    1.问题描述 给出两个单向链表的头指针,比如h1.h2,判断两个链表是否相交.编程之美为了简化问题,假设两个链表均不带环. 如下图: 2.分析与解法 解法一:直观法,先判断第一个链表的每个节点是否在第 ...

  7. c语言找出递增子数组的长度,编程之美2.16 数组中最长递增子序列的长度

    改进的方法看的头大了却还是不清楚,哎...搞算法的苦啊,纠结啊. 编程之美这本书里面就有关于这道题的一些解法,求一个一位数组中的最长序列的长度.例如,在序列1,3,2中,最长递增序列是1,3. 这道题 ...

  8. 二叉树中节点的最大的距离(编程之美3.8)

    问题来源:<编程之美>3.8 求二叉树节点的最大距离 如果把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两个节点之间的个数. 写一个程序求一 ...

  9. 编程之美1:那些关于1的个数的经典面试题

    那些关于1的个数的经典面试题 好长时间没有练算法了,笔试题一做,发现非常吃力,所以近日来找来<编程之美>一书来看看练练.为了激励自己多练,楼楼可能会出个专栏什么的,感兴趣的同学我们可以一起 ...

最新文章

  1. 干粮 -- 计算机程序设计艺术(The Art of Computer Design) - 2
  2. poj 2454 Jersey Politics 随机化
  3. 3.10 候选区域-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  4. cmw500综合测试仪使用_高端示波器是德MSOX4154A示波器-产品使用操作说明书【二手示波器吧】...
  5. ftm模块linux驱动,飞思卡尔k系列_ftm模块详解.doc
  6. 程序员的年龄越大编程能力越弱???原来我们都理解错了
  7. 下列php语法描述错误的是,下列关于对象替换语法规则的描述中,错误的是( )。...
  8. typescript vuex_将已有的Vue项目升级支持TypeScript
  9. SpringBoot系列五:SpringBoot错误处理(数据验证、处理错误页、全局异常)
  10. 为什么写了value属性 jq赋值value值不显示_为什么 String 要设计成 final,又如何设计一个不可变类呢?...
  11. python初学者编程指南源码_适合新手的开源项目(Python 篇)
  12. java diamond 有什么用_Diamond语法何时在Java 8中不起作用?
  13. 如何打造成功的数据归档策略
  14. 质数 素数 合数 因子
  15. Win10 打开图片,提示文件系统错误(-2147219196)
  16. rest php,prest
  17. html id claa 命名,Claabiw教师系列.doc
  18. 用Mathematica实现各类积分图形区域绘制与积分计算及结果的快速检验方法(一)
  19. 用简单的例子解释量子纠缠
  20. 机器数的三种表示形式---原码、补码、反码和移码

热门文章

  1. onethink后台编辑器 提示:未检测到兼容版本的flash
  2. -Objc 、 -all_load 、 -force_load
  3. 阿里云服务器常见用语
  4. I.MX6 View长宽大于屏的分辨率
  5. iOS NSArray数组过滤
  6. 原型继承与属性拷贝的混合应用
  7. MySQL单表多字段模糊查询解决方法
  8. 关于睡眠你不可不知的十件事
  9. ORACLE nvarchar2和varchar2的区别
  10. Linux的capability深入分析(1)【转】