情况特殊,考虑逻辑即可
class Solution {
public:
/**
* @param n: An integer
* @param str: a string with number from 1-n in random order and miss one number
* @return: An integer
*/
int findMissing2(int n, string &str) {
// write your code here
vector<int> a(10);
vector<int> b(10);
vector<int> c;
string str1;
for(int i=1;i<=n;i++){
str1.append(std::to_string(i));
}
for(int i=0;i<str.size();i++){
a[str[i]-'0']+=1;
}
for(int i=0;i<str1.size();i++){
b[str1[i]-'0']+=1;
}
for(int i=0;i<10;i++){
if(b[i]-a[i]==1){
c.push_back(i);
}else if(b[i]-a[i]==2){
c.push_back(i);
c.push_back(i);
}
}
if(c.size()==1){
return c[0];
}else if(c.size()==2){
int x=c[0]+10*c[1];
int y=c[1]+10*c[0];
if(x>n) return y;
if(y>n) return x;
if(str.find(std::to_string(y))==string::npos) return y;
return x;
}
}
};