当前位置: 代码迷 >> 综合 >> 906. 超级回文数(hard)
  详细解决方案

906. 超级回文数(hard)

热度:39   发布时间:2024-03-09 03:27:16.0

因为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;}
};

 

  相关解决方案