遇到这种情况,程序员的解决思路很简单——debug问题的根源。
先别急着对线,和他聊聊哪里出了问题,说不定发现他误会了你的“PR代码风格”。沟通一下,说不定还能解决矛盾。
如果沟通无效,就优化自己的工作流程,少留可钻的空子。比如说任务分解得更清晰、需求文档写得更详尽,这样就算对方想使绊子也无从下手。😏
算法题:猜数字游戏
判断哪些数字是公牛; 判断哪些数字是母牛。
思路拆解
secret
是秘密数字,guess
是玩家的猜测。例如:String secret = "1807";
String guess = "7810";
先找公牛 🐂
int bulls = 0;
for (int i = 0; i < secret.length(); i++) {
if (secret.charAt(i) == guess.charAt(i)) {
bulls++;
}
}
再找母牛 🐄
secret
和 guess
中每个数字出现的频次。secret
是 1807
,guess
是 7810
,那我们在跳过公牛的情况下,把每个字符频次存下来,就像这样:对于 secret
:1
出现 1 次,8
出现 1 次,0
出现 1 次,7
出现 1 次;对于 guess
:7
出现 1 次,8
出现 1 次,1
出现 1 次,0
出现 1 次。
int[] secretCount = new int[10];
int[] guessCount = new int[10];
// 统计非公牛的字符频次
for (int i = 0; i < secret.length(); i++) {
if (secret.charAt(i) != guess.charAt(i)) {
secretCount[secret.charAt(i) - '0']++;
guessCount[guess.charAt(i) - '0']++;
}
}
// 计算母牛数量
int cows = 0;
for (int i = 0; i < 10; i++) {
cows += Math.min(secretCount[i], guessCount[i]);
}
最终结果
"xAyB"
这样的字符串,x
是公牛数量,y
是母牛数量。return bulls + "A" + cows + "B";
完整代码 💻
public String getHint(String secret, String guess) {
int bulls = 0;
int[] secretCount = new int[10];
int[] guessCount = new int[10];
for (int i = 0; i < secret.length(); i++) {
if (secret.charAt(i) == guess.charAt(i)) {
bulls++;
} else {
secretCount[secret.charAt(i) - '0']++;
guessCount[guess.charAt(i) - '0']++;
}
}
int cows = 0;
for (int i = 0; i < 10; i++) {
cows += Math.min(secretCount[i], guessCount[i]);
}
return bulls + "A" + cows + "B";
}
-END-
以上,就是今天的分享了,看完文章记得右下角给何老师点赞,也欢迎在评论区写下你的留言。