翻译数字串分析---待字闺中面试题
来源:互联网 发布:美工网 编辑:程序博客网 时间:2024/04/20 15:44
翻译数字串分析---待字闺中面试题
题目:
给一个数字串,比如12259,映射到字母数组,比如,1 -> a, 2-> b,... , 12 -> l ,... 26-> z。那么,12259 -> lyi 或 abbei 或 lbei 或 abyi。输入一个数字串,判断是否能转换成字符串,如果能,则打印所以有可能的转换成的字符串。
思路:
开始今天的分析。这个题目是一个比较直接,比较简单的题目。面试官会出这样的题目,一般都是考察大家的coding的功力的。这个实话实说,真的没有捷径。就是多写、多练,也可以阅读优秀的代码,不断的体会思路。
我们这里来分析一下这个题目的分析思路。看完这个描述,我们应该注意到一下的细节:
映射是在[1,26]这个范围内数字
输入的字符串是否包括0或者负数?
这些细节要注意,不明确的要咨询面试官,要不然,很容易让你的程序出现漏洞。面试官也比较在意这个交互的过程。
充分理解题目的含义、目的之后,很直接的就可以想到这个题目可以用递归解决。如原题中的例子:12259,它有两个递归的子问题,(1)2259和(12)259,前面的括号表示是否能够通过映射表翻译。同理每一个子问题,都会表示为这样的两个子问题。
接下来,我们考虑(1)2259的两个子问题:
(12)259
(122)59
大家有注意到,第一个和12259的一个子问题重复了。大家是否对这个似曾相识呢?当大家把递归过程的树形结构画出来,会发现更多的重复子问题,这就给了我们改进的空间,只需要取消这些重复计算就可以了。
第一个方法就是记忆法,将计算过的结果缓存起来,这样可以后续接着使用。但是更近一步,我们是可以采用动态规划的方法的。很多同学也都直接的想到了。
上面的过程,是为初学者指的路,希望能对大家有所帮助。但还有一个细节,大家要注意,这个题目不仅仅是判断是否可以,还需要打印出来所有的情况。这个细节要在编程的时候注意。
代码为:
#include <iostream>using namespace std;void digit_to_character(char* s, char* new_s, int idx){ if((s == NULL) || (*s == '\0')) { new_s[idx] = '\0'; cout << new_s << endl; return; } new_s[idx++] = (*s - '1' + 'a'); digit_to_character(s+1, new_s, idx--); if(*(s+1) == '\0') { return; } int first_two = (*s - '0') * 10 + (*(s+1) - '0'); if(first_two <= 26) { new_s[idx++] = (first_two - 1 + 'a'); digit_to_character(s+2, new_s, idx--); }}void digit_character_mapping(char* s){ int len = strlen(s); for(int i = 0; i < len; ++i) { if( (s[i]<'1') || (s[i] > '9') ) { cout << "Invalid input!" << endl; return; } } char* new_s = (char*)malloc(len*sizeof(char) + 1); digit_to_character(s, new_s, 0); free(new_s);}int main(){ char s[] = "12259"; digit_character_mapping(s); return 0;}
- 翻译数字串分析---待字闺中面试题
- 翻译数字串分析---待字闺中面试题
- “待字闺中”面试题之----最新版本
- 翻译数字串
- 待字闺中之相差甚远面试题分析
- 【每日面试题】最大连续递增数字串
- 百度面试题——最大连续数字串问题
- 字符串面试题系列之二:连续最长数字串
- 待字闺中之构造最大数分析
- 9/29-10/6待字闺中面试题练习
- 10/8-10/14待字闺中面试题练习
- 经典面试题——求字符串中最长的数字串
- 基于visual Studio2013解决面试题之0908最大连续数字串
- 翻译数字串 transform number to string
- 待字闺中:括号匹配分析
- 待字闺中之逆序分析
- 待字闺中之此起彼伏分析
- 待字闺中之子序列分析
- 基于Flex的实时H.264流转发平台之流媒体推送端(librtmp)
- JAVA中String与StringBuffer的区别
- jpa之hibernate4.2.4之tomcat6.0测试
- 野人过河问题
- JDK的卸载不是难题
- 翻译数字串分析---待字闺中面试题
- 从决策树学习谈到贝叶斯分类算法、EM、HMM
- Session生命周期讨论
- 欧拉回路及哈密顿回路
- 黑客与画家 笔记
- poj2352 Stars
- HDU 2647 - Reward(拓扑排序)
- UVA OJ 685题,2012年10月5日-2013年10月4日
- 二叉树遍历的递归和非递归算法