classSolution:defsuperpalindromesInRange(self, L:str, R:str)->int:defisPalindrome(number):
number =str(number)
i =0
rnumber = number[::-1]while i <len(number):if number[i]!= rnumber[i]:returnFalse
i+=1returnTruesum=0for i inrange(int(L),int(R)+1):if isPalindrome(int(math.sqrt(i)))==Trueand\
isPalindrome(int(i))==Trueand \
int(math.sqrt(i))*int(math.sqrt(i))==i:sum=sum+1returnsum
下面给出一来自LeetCode官方的一种正确的解法:
classSolution(object):defsuperpalindromesInRange(self, L, R):
L, R =int(L),int(R)
MAGIC =100000defreverse(x):
ans =0while x:
ans =10* ans + x %10
x /=10return ans
defis_palindrome(x):return x == reverse(x)
ans =0# count odd lengthfor k inxrange(MAGIC):
s =str(k)# Eg. s = '1234'
t = s + s[-2::-1]# t = '1234321'
v =int(t)**2if v > R:breakif v >= L and is_palindrome(v):
ans +=1# count even lengthfor k inxrange(MAGIC):
s =str(k)# Eg. s = '1234'
t = s + s[::-1]# t = '12344321'
v =int(t)**2if v > R:breakif v >= L and is_palindrome(v):
ans +=1return ans