说明公牛和牛的算法在代码
问题描述:
算法在这里: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] --;
为什么它使用负数计数的猜测和正数出现在秘密计数。
答
的numbers
阵列跟踪在两个阵列看到的无与伦比数字。最初,numbers
数组中的每个条目都是0,表示该数字在两个数组中都没有出现。积极条目意味着该数字在secret
阵列中看到的次数多于guess
阵列中的数量。否定条目意味着在guess
阵列中看到的数字多于secret
阵列中的数字。
因此,当算法看到secret
数组中的数字时,它会增加numbers
数组中的相应条目。如果该条目在增量前恰好为负数,则表示数字已在guess
数组中看到,因此cows
计数增加。
同样,如果算法在guess
数组中看到一个数字,它将减少numbers
数组中的相应条目。如果在递减之前该条目恰好是正数,则意味着数字已经在secret
数组中看到,因此计数增加。
可能的重复[++ i,i ++前/后增量用法与数组在Java](http://stackoverflow.com/questions/39809772/ii-pre-post-incrementation-usage-with-arrays-in -java) –
我没有理解++ i/i ++操作符的问题。重点在于为什么增加'秘密'和减少'猜测'。 – user697911
如果你对算法中的某些部分有困惑,那么最好明确地陈述它,因为'但是如何理解这个部分:'好像是一个问题,在我修改了描述的副本 –