贴一下今天一日一题的题目:
299. 猜数字游戏 - 力扣(LeetCode) (leetcode-cn.com)
今天写一日一题的时候,思路异常简单。
思路解释:
先一次循环,将bull的值给确定,后来就是将两个string放进hash表里面就可以了,然后find函数,找到了就res++,最后将res转换成string类型,然后加入到ans即可。
但是有string的变量加入string数组的时候,我采用的是
#include
using namespace std ;
int main()
{
string a ;
int num = 456 ;
string res = to_string(num) ;
a.push_back(res) ;
cout << a << endl ;
return 0 ;
}
小细节:
好吧,这样是不行的,将a.push_back(res)
,应该将a += res ;
算了,写都写了,贴个代码吧:
我一开始是用hash table来进行find的,最后只击败5%的人,原始代码如下:
class Solution {
public:
string getHint(string secret, string guess) {
int n = secret.size() ;
string ans = "" ;
multiset ha1 , ha2 ;
int res = 0 ;
for(int i = 0; i < n ; ++ i)
{
if(secret[i] == guess[i])
{
res ++ ;
secret[i] = guess[i] = -1 ;
}
}
string num = to_string(res) ;
ans+=num ;
ans.push_back('A') ;
for(int i = 0 ; i < n ; ++ i)
{
if(secret[i] != -1 && guess[i] != -1)
{
ha1.insert(secret[i]) ;
ha2.insert(guess[i]) ;
}
}
int cnt = 0 ;
for(char c : ha1)
{
auto it = ha2.find(c) ;
if(it != ha2.end())
{
cnt ++ ;
ha2.erase(it) ;
}
}
string cn = to_string(cnt) ;
ans+=cn ;
ans.push_back('B') ;
return ans ;
}
};
后来看到大佬是可以直接用数组来优化的,学习了.
class Solution {
public:
string getHint(string secret, string guess) {
int n = secret.size();
int A = 0;
int B = 0;
int CA[10];
int CB[10];
memset(CA, 0, sizeof(CA));
memset(CB, 0, sizeof(CB));
for (int i = 0; i < n; i++) {
if (secret[i] == guess[i]) A++;
CA[secret[i] - '0']++;
CB[guess[i] - '0']++;
}
for (int i = 0; i < 10; i++) {
B += min(CA[i], CB[i]);
}
B -= A;
string ans = "";
ans = to_string(A) + "A" + to_string(B) + "B";
return ans;
}
};
就是mark一下,一个小细节而已,虽然不起眼,但是有时候确实能把你卡死。
最近在学新东西,下次在更,拜拜。