「力扣」299. 猜数字游戏(第五天)

299. 猜数字游戏

    • 题目
    • 解题

题目

题目难度:简单

你正在和你的朋友玩 猜数字(Bulls and Cows)游戏:你写下一个数字让你的朋友猜。每次他猜测后,你给他一个提示,告诉他有多少位数字和确切位置都猜对了(称为“Bulls”, 公牛),有多少位数字猜对了但是位置不对(称为“Cows”, 奶牛)。你的朋友将会根据提示继续猜,直到猜出秘密数字。

请写出一个根据秘密数字和朋友的猜测数返回提示的函数,用 A 表示公牛,用 B 表示奶牛。

请注意秘密数字和朋友的猜测数都可能含有重复数字。

示例 1:

输入: secret = "1807", guess = "7810"

输出: "1A3B"

解释: 1 公牛和 3 奶牛。公牛是 8,奶牛是 0, 1 和 7。

示例 2:

输入: secret = "1123", guess = "0111"

输出: "1A1B"

解释: 朋友猜测数中的第一个 1 是公牛,第二个或第三个 1 可被视为奶牛。

解题

这道理不知道为什么卡了我很久,看了大佬们的解答,果然大佬就是大佬。不过我还是记录我自己的方法,性能一般,但是很好理解。

计算方法:

  • 公牛=相同位置的相同字符数
  • 母牛=两子串相同字符数-公牛数

步骤:

  1. 计算出公牛的数目 equ ;通过一个for循环来遍历
  2. 双重for循环遍历两个数组 ,若两个数组的值一样,same++,接着把secret[i]的值变成‘@’,把guess[i]的值变成‘$’,确保不会再使用到这些用过的值。

总结:
性能真的太一般!得改进

class Solution {
    public static String getHint(String secret, String guess) {
        char s[] = secret.toCharArray();
        char g[] = guess.toCharArray();
        int num = s.length;
        int equ = 0;
        int same = 0;

        for(int i = 0 ; i < num; i++){
            if(s[i] == g[i]){
                equ++;
            }
        }

        for(int j = 0 ; j < num; j++){
                for(int k = 0 ; k < num; k++){
                    if(s[j] == g[k] ){
                        same++;
                        s[j] = '@';
                        g[k] = '$';
                        break;
                    }
                }
            }
        same = same-equ;
        return equ+"A"+same+"B";
    }
}

「力扣」134. 加油站(第六天)
「力扣」299. 猜数字游戏(第五天)_第1张图片

你可能感兴趣的:(#,LeetCode,算法)