leetcode之Bulls and Cows

本文提供了一种解决猜数字游戏的高效算法。通过使用哈希表或数组来记录每个数字出现的次数,该算法能够准确地计算出猜测中正确位置的数字数量(公牛数)及正确数字但位置不对的数量(奶牛数)。文中给出了两种实现方案的C++代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此题就是用一个for循环,遍历secret 和 guess的各个位的数字,对于相同位置且对应数字相同的,bulls++;对于相同位置而对应数字不同的情况,分别用两个数组/哈希表存储相应数字的出现次数。

给出两种解法的C++代码:

class Solution {

public:
    string getHint(string secret, string guess) {
        int bulls = 0;
        int cows = 0;
        unordered_map<char, int> secret_mp;
        unordered_map<char, int> guess_mp;
        for(int i=0;i<secret.size();i++){
            if(secret[i]==guess[i])
                bulls++;
            else{
                if(secret_mp[guess[i]]>0){
                    cows++;
                    secret_mp[guess[i]]--;
                }
                else{
                    guess_mp[guess[i]]++;
                }
                if(guess_mp[secret[i]]>0){
                    cows++;
                    guess_mp[secret[i]]--;
                }
                else{
                    secret_mp[secret[i]]++;
                }
            }
        }
        return to_string(bulls)+"A"+to_string(cows)+"B";
    }
};
/*解法二:
class Solution {
public:
    string getHint(string secret, string guess) {
        int bulls = 0;
        int cows = 0;
        int number[10]={0};
        for(int i=0;i<secret.size();i++){
            if(secret[i]==guess[i])
                bulls++;
            else{
                if(number[secret[i]-'0']<0)
                    cows++;
                if(number[guess[i]-'0']>0)
                    cows++;
                number[secret[i]-'0']++;
                number[guess[i]-'0']--;
            }
        }
        return to_string(bulls)+"A"+to_string(cows)+"B";
    }
};
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值