2017-10-09 11 views
1

私はSPOJ.ItのACODE問題を解決していますが、単純なDpの問題hereNZECエラーが

あるspojこれは私のソリューションです:

//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. 入力サイズは、あなたが原因decode配列境界の外にアクセスするので

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

    にエラーが発生します1です。

  2. 0を有効な数値として扱いますが、そうではありません。たとえば、入力"10"の正解は、ではなく、1です。

+0

ありがとうございました。これらのエッジケースがミスしました。 – MaPY