声明:
今天是第81道题。给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除
(手动比心ღ( ´・ᴗ・` ))
正文
题目:给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
说明:不要使用任何内置的库函数,如 sqrt
。
示例 1:
输入:16 输出:True
示例 2:
输入:14 输出:False
解法1。常规想法是逐一遍历,看看能不能找到那个刚好是num的平方根,但这样会超时,用对撞指针也会。所以肯定要尝试新颖的方法,一般是从数学的角度入手(⊙o⊙),观察一下有效完全平方数:0,1,4,9,16,25,36,…再看下他们的差:1,3,5,7,9,11,…,看来完全平方数是奇数之和啊,那么接下来可以coding了,代码如下。
执行用时: 32 ms, 在Valid Perfect Square的Python提交中击败了29.43% 的用户
class Solution(object):
def isPerfectSquare(self, num):
"""
:type num: int
:rtype: bool
"""
i = 1
while num > 0:
num -= i
i += 2
return num == 0
解法2。用二分法。
执行用时: 24 ms, 在Valid Perfect Square的Python提交中击败了98.80% 的用户
class Solution(object):
def isPerfectSquare(self, num):
"""
:type num: int
:rtype: bool
"""
left = 0
right = num
while left+1 < right: # 注意这里left初始化为0,判断条件是left+1 < right
mid = (left+right)/2
if mid**2 == num:
return True
elif mid**2 < num:
left = mid
else:
right = mid
return False # 遍历完了都还没有return True意味着没有找到,返回False
结尾
解法1:https://blog.csdn.net/qq_34364995/article/details/80725886
解法2:LeetCode