leetcode——633.平方数之和

leetcode——633.平方数之和

经过40多分钟才写出来,应该还是思路的问题。

但是通过了我就很开心

 1 class Solution:
 2     def judgeSquareSum(self, c: int) -> bool:
 3         if c==0:
 4             return True
 5         
 6         i=int((c//2)**0.5)
 7         j=int((c//2)**0.5)+1
 8         while i<int(c**0.5)+1 and j>=0:
 9             if i**2+j**2==c:
10                 return True
11             elif i**2+j**2>c:
12                 j=j-1
13             elif i**2+j**2<c:
14                 i=i+1
15         else:
16             return False
执行用时 :940 ms, 在所有 Python3 提交中击败了5.23%的用户
内存消耗 :13.8 MB, 在所有 Python3 提交中击败了8.44%的用户
 
举个例子:
假如c=78
因为c大于8**2,小于9**2,
所以遍历的时候 i 的大小最大也就是8。因为是两个数的平方和,所以最公平的就是i**2和j**2各占c/2。
所以i的起始值就是从根号c/2开始,到根号c结束;
j从根号2/c+1开始,依次减小,到0结束。
遍历过程以及判断条件如程序中所示
 
                                                                                     ——2019.9.25