先说一下,这道题的意思,让你找到同一位的并且相同的数,总和为A,不同位相同的数总和为B,最后输出A,B的值。
这道题默认的是secret和guess位数一样的。
参考了大神的代码,学习了以下,写下思路:
进行循环
首先判断本次循环对应的位是否相同,如果相同,bull++;如果不同判断secret这位数在guess中是否出现,有的话cow++,在判断guess数是否在secret出现,有的话进行bull++;
判断的条件是namemap在secret出现则++;在guess出现则--;
如果namemap小于0,则说明这secret位数在guess出过了;如果大于0,则说明guess这位数在secret出现过了。
代码如下:
class Solution{
public:
string getHint(string secret,string guess){
int n1=secret.size();
int namemap[10]={0};
int bull=0,cow=0;
for(int i=0;i<n1;i++){
if(secret[i]==guess[i]) bull++;
else{
cow=(namemap[secret[i]-'0']<0)?cow+1:cow;
namemap[secret[i]-'0']++;
cow=(namemap[guess[i]-'0']>0)?cow+1:cow;
namemap[guess[i]-'0']--;
}
}
return to_string(bull)+"A"+to_string(cow)+"B";
}
};
本文深入解析了一段用于计算秘密数字序列中同位数匹配计数的代码实现,通过循环遍历比较秘密序列和猜测序列,详细阐述了如何计算相同位置上的数字匹配次数(bulls)和不同位置但数字相同的匹配次数(cows)。同时,介绍了通过map数据结构优化计数过程,确保算法高效运行。
708

被折叠的 条评论
为什么被折叠?



