leetcode——633.平方数之和

依然范特西╮ 提交于 2019-11-30 12:14:00

经过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

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!