ACODE spoj的NZEC错误

时间:2017-10-09 04:10:06

标签: 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;  
        }

    }


}

但是当我尝试提交它时,我收到了一个N​​ZEC错误。我也测试了它的大值而且没有破坏。我不知道如何改进它。

1 个答案:

答案 0 :(得分:1)

  1. 当输入尺寸为1时,您会收到错误

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

    因为访问了decode数组边界。

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