206. 隐藏的平方数(Concealed Square)
找到唯一一个正整数,它的平方具有1_2_3_4_5_6_7_8_9_0的形式,其中“_”表示一位数。
分析:满足题目中要求形式的平方数最小的是1020304050607080900,也就是所有下划线代表的数字都是零;而最大的平方数应该是1929394959697989990,也就是所有下划线代表的数字都是九。分别取这两个数的平方根,也就是我们想要找的数\(N\)的上界和下界,有:
$$
1010101010\le N\le 1389026623
$$
此外,满足题目要求的平方数最后一位数是0,则其平方根的最后一位数也应该是0,因此我们可以从1389026620开始每次递减10,求这个数的平方,看它满不满足题目要求。找到满足要求的数后返回即可。代码如下:
# time cost = 1.58 ms ± 17.4 µs
def is_concealed_square(number):
seq = ['1', '2', '3', '4', '5', '6', '7', '8', '9','0']
digits = [x for x in str(number)]
if len(digits) == 19 and digits[0::2] == seq:
return True
return False
def main(n=1389026620):
while True:
if is_concealed_square(n**2):
return n
else:
n = n - 10