2017-10-09 1 views
1

ich das Acode Problem der SPOJ.It bin die Lösung ein einfaches Dp Problem ist hereNZEC Fehler für ACODE SPOJ

Dies ist meine Lösung:

//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; 
     } 

    } 


} 

Aber ich bin immer einen NZEC Fehler, wenn ich versuche, Ich habe es auch für große Werte getestet und es bricht nicht. Ich verstehe nicht, wie ich es sonst verbessern könnte.

Antwort

1
  1. Wenn die Eingangsgröße ist 1 Sie einen Fehler in

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

    wegen der Grenzen aus den decode Array zugreifen.

  2. Sie behandeln 0 als eine gültige Nummer, aber es ist nicht. Die richtige Antwort für den Eingang "10" lautet beispielsweise 1, nicht 2.

+0

Vielen Dank.Miss diese Rand Fälle. – MaPY