Java 解码字符串的方法有多种?
我正在解决需要解码字符串的问题 包含A-Z字母的消息正在编码为数字 使用以下映射: ‘A’->1 ‘B’->2 ‘Z’->26 给定只包含数字的非空字符串,确定总数 解码它的方法有很多 例1: 输入:“12” 产出:2 说明:它可以被解码为“AB”(12)或“L”(12) 例2: 输入:“226” 产出:3 说明:它可以被解码为“BZ”(226)、“VF”(226)或“BBF”(26) 我提出了下面的递归方法,但它为这个输入“227”提供了错误的输出。输出应为“2”,但我的程序给出了“3”:Java 解码字符串的方法有多种?,java,algorithm,data-structures,Java,Algorithm,Data Structures,我正在解决需要解码字符串的问题 包含A-Z字母的消息正在编码为数字 使用以下映射: ‘A’->1 ‘B’->2 ‘Z’->26 给定只包含数字的非空字符串,确定总数 解码它的方法有很多 例1: 输入:“12” 产出:2 说明:它可以被解码为“AB”(12)或“L”(12) 例2: 输入:“226” 产出:3 说明:它可以被解码为“BZ”(226)、“VF”(226)或“BBF”(26) 我提出了下面的递归方法,但它为这个输入“227”提供了错误的输出。输出应为“2”,但我的程序给出了“3”:
公共静态整数解码方式(字符串数据){
返回帮助程序(data,data.length());
}
私有静态int-helper(字符串数据,int-k){
如果(k==0)
返回1;
int s=data.length()-k;
如果(数据字符='0')
返回0;
int result=helper(数据,k-1);
如果此行中的(k>=2&&Integer.parseInt(data.substring(0,2))-
if (k >= 2 && Integer.parseInt(data.substring(0, 2)) <= 26) {
或
2,2和7,而不是你想象中的22和7?我用示例编辑了我的问题。基本上我的输入有两种方式:27
和27
,但我的程序给我3作为输出。如果k
为0,为什么返回1
?顺便问一下,为什么需要k
?不太明白。你能解释一下吗?数据始终是“227”
或任何可能的输入。因此数据。子字符串(0,2)
总是会产生22
,它总是小于26
,因此您要计算3而不是2。例如367呢?它应该返回3,6和7,但是上面的代码只检查3?这应该可以工作:data.substring(data.length()-k,data.length()-k+1)@MS90我可能有一个off by one错误,但即使如此,我知道第二个索引必须比第一个大2,因为子字符串排除了第二个索引。好的,但是在这种情况下会怎么样:1212236->12 21,在这种情况下,中间的2被省略?@DillonDavis
if (k >= 2 && Integer.parseInt(data.substring(0, 2)) <= 26) {
data.substring(data.length()-k, data.length()).substring(0, 2)
data.substring(data.length()-k, data.length()-k+2)