我正在解决SPOJ的Acode问题,这是一个简单的Dp问题here
这是我的解决方案:
//http://www.spoj.com/problems/ACODE/
import java.util.Scanner;
//import java.util.Math;
public class Acode {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String encodedString = sc.next();
while (!encodedString.equals("0")) {
long number = numOfDecodings(encodedString);
System.out.println(number);
encodedString = sc.next();
}
return;
}
public static long numOfDecodings(String encodedString)
{
int lengthOfString = encodedString.length();
long decode[] = new long[lengthOfString];
decode[0] = 1;
if (isCurrentTwoDigitsValid(encodedString, 1)) {
decode[1] = 2;
} else {
decode[1] = 1;
}
for (int i=2; i<lengthOfString; i++) {
if (isCurrentTwoDigitsValid(encodedString, i)) {
decode[i] = decode[i-2] + decode[i-1];
} else {
decode[i] = decode[i-1];
}
}
return decode[lengthOfString-1];
}
public static boolean isCurrentTwoDigitsValid(String encodedString, int startIndex)
{
char c1 = encodedString.charAt(startIndex);
char c2 = encodedString.charAt(startIndex-1);
if ( (c2=='1') || (c2=='2' && c1<='6')) {
return true;
} else {
return false;
}
}
}
但是当我尝试提交它时出现 NZEC 错误。我也测试了它的大值并且它没有损坏。我不明白还有什么可以改进它。
最佳答案
当输入大小为
1
时会出现错误if (isCurrentTwoDigitsValid(encodedString, 1)) { decode[1] = 2; } else { decode[1] = 1; }
因为访问超出了
decode
数组边界。您将
0
视为有效数字,但事实并非如此。例如,输入“10”
的正确答案是1
,而不是2
。
关于java - ACODE spoj 的 NZEC 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46638754/