因为R的长度是18,那么超级回文数最多不超过10^9,那两边不会超过10^5
枚举,构造回文串x(<10^5),并判断x^2是否为回文串
class Solution {
private:string ltos(long l){ostringstream os;os << l;string res;istringstream is(os.str());is >> res;return res;}bool check(string s){int l = 0, r = s.size() - 1;while(l < r){if(s[l] != s[r]) return false;l++;r--;}return true;}
public:int superpalindromesInRange(string L, string R) {long left = stol(L);long right = stol(R);int magic = 100000;int res = 0;//构造长度为奇数的回文串for(int k = 1; k < magic; k++){string tmp = to_string(k);int n = tmp.size();for(int i = n - 2; i >= 0; i--){char a = tmp[i];tmp.append(1, a);}long val = stol(tmp);val *= val;if(val > right) break;if(val >= left && check(ltos(val))) {res++;}}//构造长度为偶数的回文串for(int k = 1; k < magic; k++){string tmp = to_string(k);int n = tmp.size();for(int i = n - 1; i >= 0; i--){char a = tmp[i];tmp.append(1, a);}long val = stol(tmp);val *= val;if(val > right) break;if(val >= left && check(ltos(val))){res++;}}return res;}
};