Leetcode 299 Bulls and Cows

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Neo233/article/details/85018887

题目:
You are playing the following Bulls and Cows game with your friend: You write down a number and ask your friend to guess what the number is. Each time your friend makes a guess, you provide a hint that indicates how many digits in said guess match your secret number exactly in both digit and position (called “bulls”) and how many digits match the secret number but locate in the wrong position (called “cows”). Your friend will use successive guesses and hints to eventually derive the secret number.

Write a function to return a hint according to the secret number and friend’s guess, use A to indicate the bulls and B to indicate the cows.

Please note that both secret number and friend’s guess may contain duplicate digits.

Example 1:

Input: secret = “1807”, guess = “7810”

Output: “1A3B”

Explanation: 1 bull and 3 cows. The bull is 8, the cows are 0, 1 and 7.
Example 2:

Input: secret = “1123”, guess = “0111”

Output: “1A1B”

Explanation: The 1st 1 in friend’s guess is a bull, the 2nd or 3rd 1 is a cow.
Note: You may assume that the secret number and your friend’s guess only contain digits, and their lengths are always equal.
这个题意挺简单的,就是看对应位置上面两个字符串相同的个数与不在对应位置的数量,方法为使用一重for循环来计算重复的个数,最后的时候进行字符串的拼接。
代码:
1)

class Solution {
public:
    string getHint(string secret, string guess) {
        int a = 0,b = 0,n = guess.size();
        int ds[10] = {0},dg[10] = {0};//标记相同的个数
        for(int i = 0 ; i < n ;i++){
            int x = secret[i] - '0';//将字符串转化为数字
            int y = guess[i] - '0';
            if(x == y){
                a++;
            }
            ds[x]++,dg[y]++;
        }
        for(int i = 0 ; i < 10 ; i++){
            b += min(ds[i],dg[i]);
        }
        b -= a;//除掉之后的数量
        return to_string(a) + 'A' + to_string(b) + 'B';
    }
};

2)

扫描二维码关注公众号,回复: 4613593 查看本文章
class Solution {
public:
    string getHint(string secret, string guess) {
        int bulls = 0, cows = 0;
        int cnt1[10], cnt2[10];
        memset(cnt1, 0, sizeof(cnt1));
        memset(cnt2, 0, sizeof(cnt2));
        for (int i = 0;i < secret.length(); i++) {
            if (guess[i] == secret[i]) {
                bulls++;
            } else {
                cnt1[secret[i] - '0'] ++;
                cnt2[guess[i] - '0'] ++;
            }
        }
        for (int i = 0;i < 10; i++) {
            cows += min(cnt1[i], cnt2[i]);
        }
        return to_string(bulls) + "A" + to_string(cows) + "B";
    }
};

猜你喜欢

转载自blog.csdn.net/Neo233/article/details/85018887