LeetCode : Bulls and Cows

Solution 1

// int to string
string int2string(int num)
{
    stringstream ss;
    ss << num;
    return ss.str();
}

string getHint(string secret, string guess)
{
    int bullCnt = 0, cowCnt = 0, cnt = 0;
    map<char, int> rec;

    // assume that secret.length() == guess.length() 
    for(int i = 0; i < secret.length(); i++)
    {
        if(secret[i] == guess[i])
        {
            bullCnt++;
            continue;
        }

        if(rec.find(secret[i]) == rec.end())
            rec[secret[i]] = 1;
        else
            rec[secret[i]] ++;
    }

    for(int i = 0; i < guess.length(); i++)
    {
        if(rec.find(guess[i]) != rec.end())
        {
            cowCnt++;
            rec[guess[i]] --;
            if(rec[guess[i]] == 0)
            rec.erase(guess[i]);
        }
    }

    return int2string(bullCnt) + "A" + int2string(cowCnt) + "B";

}

Solution 2

  • int 型转换为 string型使用函数to_string()。
  • 对于有限字符的可以直接用数组来记录。
string Solution::getHint(string secret, string guess)
{
    int bullCnt = 0, cowCnt = 0, cnt = 0;
    vector<int> secret_cnt(10, 0), guess_cnt(10, 0); 

    for(int i = 0; i < secret.length(); i++)
    {
        if(secret[i] == guess[i])
        {
            bullCnt ++;
            continue;
        }

        int g = guess[i] - '0', s = secret[i] - '0';

        // guess中的字符和secret中的字符对比。
        if(secret_cnt[g])
        {
            secret_cnt[g] --;
            cowCnt ++;
        }
        else
            guess_cnt[g]++;

        // secret中的字符和guess中的字符对比
        if(guess_cnt[s])
        {
            guess_cnt[s]--;
            cowCnt ++;
        }
        else
            secret_cnt[s]++;

    }

    // int型转换为string类型的函数
    return to_string(bullCnt) + "A" + to_string(cowCnt) + "B";

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值