说明公牛和牛的算法在代码

问题描述:

算法在这里:https://discuss.leetcode.com/topic/28463/one-pass-java-solution说明公牛和牛的算法在代码

public static String getHint(String secret, String guess) { 
     int bulls = 0; 
     int cows = 0; 
     int[] numbers = new int[10]; 
     for (int i = 0; i<secret.length(); i++) { 
      int s = Character.getNumericValue(secret.charAt(i)); 
      int g = Character.getNumericValue(guess.charAt(i)); 
      if (s == g) bulls++; 
      else { 
       if (numbers[s] < 0){ 
        cows++; 
       } 
       if (numbers[g] > 0){ 
        cows++; 
       } 
       numbers[s] ++; 
       numbers[g] --; 
      } 
     } 
     return bulls + "A" + cows + "B"; 
    } 

但如何理解这一部分:

numbers[s] ++; 
numbers[g] --; 

为什么它使用负数计数的猜测和正数出现在秘密计数。

+1

可能的重复[++ i,i ++前/后增量用法与数组在Java](http://stackoverflow.com/questions/39809772/ii-pre-post-incrementation-usage-with-arrays-in -java) –

+0

我没有理解++ i/i ++操作符的问题。重点在于为什么增加'秘密'和减少'猜测'。 – user697911

+0

如果你对算法中的某些部分有困惑,那么最好明确地陈述它,因为'但是如何理解这个部分:'好像是一个问题,在我修改了描述的副本 –

numbers阵列跟踪在两个阵列看到的无与伦比数字。最初,numbers数组中的每个条目都是0,表示该数字在两个数组中都没有出现。积极条目意味着该数字在secret阵列中看到的次数多于guess阵列中的数量。否定条目意味着在guess阵列中看到的数字多于secret阵列中的数字。

因此,当算法看到secret数组中的数字时,它会增加numbers数组中的相应条目。如果该条目在增量前恰好为负数,则表示数字已在guess数组中看到,因此cows计数增加。

同样,如果算法在guess数组中看到一个数字,它将减少numbers数组中的相应条目。如果在递减之前该条目恰好是正数,则意味着数字已经在secret数组中看到,因此计数增加。