黑马程序员技术交流社区
标题:
求思路
[打印本页]
作者:
卓礼敏
时间:
2013-4-16 20:02
标题:
求思路
本帖最后由 陈丽莉 于 2013-4-16 22:33 编辑
将字母A-Z编码,A为1,B为2,……依此类推,Z为26;则ABC编码为123。但是反向解码时,解码结果不唯一,比如123可以解码为 1-2-3:ABC,解码为12-3:LC,解码为1-23:AW(注意,127不能解码为1-27,因为范围只能为1-26)。
现给出一组编码后的数字串,让你求该数字串可以有几种解码方式(上例中,123对应着3种解码方式)。问题输入将保证其为一个合法的数字串。比如100是 一个不合法的数字串,因为0或者00不代表一个字母;此外01不能视为1。
Sample Input
25114 1111111111 3333333333
Sample Output
6 89 1
这到题怎么下手,想了那么多一点头绪都没有,大神给个思路啊
作者:
殇_心。
时间:
2013-4-16 20:32
哥们。你在考验我们的眼力吗?
作者:
刘胜寒
时间:
2013-4-16 20:34
递归.....
作者:
段旭东
时间:
2013-4-16 20:34
{:soso_e134:}敢不敢 编辑一下!我的眼睛!
作者:
张昶
时间:
2013-4-16 22:33
天啊!看完了,眼都晕了,高手在哪里?
作者:
杨玉辉
时间:
2013-4-17 00:04
这个越看越像 老毕视频里讲的那个求最大相同字串的例子
改一下条件,求其最多有俩个相同字串的情况
String[] ss = {"0","01","02","03","04","05","06","07","08","09");
private static String getString(String s){
for(int x=0;x<2; x++){
for(int start=0,end=2-x;end != s.length()+1; start++,end++){
String s1 = s.substring(start,end);
//此处代码去查表实现,并带上条件,排除以上不可以实现的地方
for(String s : ss){
if(s==s1){
s2 = s.substring(end-1,s.length());
getString(s2);
}
}
int i = Integer.parseInt(s1);
if(i>= 27 || i<=99){
s2 = s.substring(end-1,s.length());
getString(s2);
}
}
}
}
当x=0时候,取的是一个字符串数字对应的编码,遇到 0 应将 之前的一位看做是一起的 字符串 ,这时取其字串重新 进行递归 运算
当x=1时候,取的是所有两个字符串数字对应的编码,由于此处编码形式只包含首字符串为1 或者为 2 的数,判断时应考虑全面,数值区间不在1--26之间的所有数值应该取其字串进行递归运算,总之好麻烦。
一个字符的子串中出现0,就得把0归结为上一个字串的内容,取剩余的后面的作为子串进行递归运算
两个字符的字串出现0开头的,或者 27 至 99 之间的所有数值 都需要取其 前一位开头的字串
数值尽量少些,尽量避免内存泄露
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2