用哈希表存从1到n中所有的平方数,两层循环遍历1到n并判断平方和是否在表中,因为第二层循环只遍历了第一个数到n,所以结果要*2(前两个数互换肯定也符合条件)。
class Solution:
def countTriples(self, n: int) -> int:
s = {i*i for i in range(1, n+1)}
ans = 0
for i in range(1, n+1):
for j in range(i, n+1):
if i*i + j*j in s:
ans += 1
return ans*2
居然能比三层循环暴力快好几十倍