2016-08-12 1 views
-3

On m'a posé une question similaire à celui-ci sur HackerRank: Check If there exists a CircleTrouver s'il existe un cercle donné se déplace

La différence était que F a été remplacé par G (G signifie savoir avancer d'une étape).

J'ai implémenté un algorithme comme celui décrit dans la réponse acceptée, mais j'ai échoué un cas de test. Quelqu'un pourrait-il trouver le bug pour moi?

static String checkIfCircleExists(String s) { 
     int x = 0; 
     int y = 0; 
     int dir = 0; 

     for (char c : s.toCharArray()) { 
      switch (c) { 
       case 'G': 
        switch (dir) { 
         case 0: 
          y++; 
          break; 
         case 1: 
          x++; 
          break; 
         case 2: 
          y--; 
          break; 
         case 3: 
          x--; 
          break; 
        } 
        break; 
       case 'L': 
        dir = Math.abs((dir - 1) % 4); 
        break; 
       case 'R': 
        dir = Math.abs((dir + 1) % 4); 
        break; 
      } 
     } 

     if (x == 0 && y == 0) { 
      return "YES"; 
     } 
     return "NO"; 
    } 

Modifier

C'est une méthode d'assistance. L'entrée de cette méthode d'assistance est la chaîne d'entrée d'origine concaténée avec trois copies de la chaîne d'entrée d'origine. Par exemple, pour l'entrée "G", "GGGG" sera passé dans cette aide.

Répondre

-1

Est-ce que le code (dir - 1) % 4 fonctionne comme prévu dans votre langue?

Sinon, remplacez-le par (dir + 3) % 4

pas réelle après l'édition de question, mais peut être utile pour réduire le temps d'exécution:

Notez que le déplacement est limité dans deux cas:

  1. Le déplacement final est nul (votre solution vérifie ce cas)
  2. La direction finale diffère de la direction initiale (dans ce cas, l'objet retourne dans le position initiale après deux ou quatre tours)

Semble que vous avez rejeté le second.

+0

Désolé j'ai oublié d'ajouter que j'ai déjà modifié la chaîne d'entrée de sorte que c'est la chaîne d'entrée originale + 3 copies. c'est-à-dire que pour la chaîne d'entrée G, GGGG sera vérifié. Pourquoi la direction finale doit-elle différer de la direction initiale? – fluffychaos

+0

Oui, en cas de chaîne de 4 fois, la direction n'est pas importante. Est-ce que le code '(dir - 1)% 4' fonctionne comme prévu dans votre langue? Si non, remplacez par '(dir +3)% 4' – MBo

+0

Cela l'a corrigé, merci! – fluffychaos