I’m currently tackling the problem provided on LeetCode, which can be found here.
Could someone assist me in identifying any errors or gaps in logic within my solution?
class Solution {
public:
bool isSolvable(vector<string>& words, string result) {
unordered_map<char, int> mp;
for(auto it:words){
int size=it.size();
for(int i=0;i<size;i++){
if(mp.find(it[i])==mp.end()){
mp[it[i]]=mp.size();
}
}
}
int size=result.size();
for(int i=0;i<size;i++){
if(mp.find(result[i])==mp.end()){
mp[result[i]]=mp.size();
}
}
string num="0123456789";
//generate all permutation
do{
int num1=0;
int resultNum = 0;
//if first digit is 0
if(num[mp[result[0]]]=='0'){
continue;
}
for(auto it:result){
int currInd=mp[it];
int currDigit=num[currInd]-'0';
resultNum=resultNum*10+currDigit;
}
for(int i=0;i<words.size();i++){
int currNum=0;
//if first digit is 0
if(num[mp[words[i][0]]]=='0'){
currNum=INT_MAX;
break;
}
//generate number from current permutation
for(auto it:words[i]){
int currInd=mp[it];
int currDigit=num[currInd]-'0';
currNum=currNum*10+currDigit;
}
num1+=currNum;
if(num1>resultNum)break;
}
if(num1==resultNum)return true;
}while(next_permutation(num.begin(),num.end()));
return false;
}
};