java - ACODE spoj 的 NZEC 错误

标签 java algorithm dynamic-programming

我正在解决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. 当输入大小为 1 时会出现错误

    if (isCurrentTwoDigitsValid(encodedString, 1)) {
        decode[1] = 2;
    } else {
        decode[1] = 1;
    } 
    

    因为访问超出了 decode 数组边界。

  2. 您将 0 视为有效数字,但事实并非如此。例如,输入 “10” 的正确答案是 1,而不是 2

关于java - ACODE spoj 的 NZEC 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46638754/

相关文章:

java - Java 中的自定义字体

java - 努力找出我的词典排序算法中的逻辑错误所在

java - 这是编写该方法最有效的方法吗?

algorithm - 嵌套循环运行时间?

algorithm - 大数的阶乘

recursion - 埃拉托斯特尼筛法是动态规划的一个例子吗?

algorithm - 具有两个约束的背包问题的伪代码算法

arrays - 具有交替递增和递减值的最长子序列

java - 从 XML 元素内容中获取 InputStream

java - 如何正确停止ServerSocket线程?关闭套接字失败