python算法练习:寻找下一个完全平方数

题目大意:Return the next square if sq is a square, -1 otherwise

我自己最开始写的:

import math

def find_next_square(sq):
    a=math.sqrt(sq)#a的类型是float
#    print(type(a))
    if int(a)==a:
        return (a+1)**2
    else:    
        return -1

后来又写了一种比较笨的:

def fine_next_square(sq):
    s=[i**2 for i in range(1,1000000)]
    if sq in s:
        return s[s.index(sq)+1]
    else:
        return -1
这个方法效率低,很傻。


然后学习了更多比较好的解法,供大家参考:

def find_next_square(sq):
    root = sq ** 0.5
    if root.is_integer():
        return (root + 1)**2
    return -1
def find_next_square(sq):
    x = sq**0.5    
    return -1 if x % 1 else (x+1)**2
from math import sqrt
def find_next_square(sq):
    return (sqrt(sq)+1)**2 if sqrt(sq)%1 == 0 else -1
import math
def find_next_square(sq):
    return (math.sqrt(sq) + 1) ** 2 if (math.sqrt(sq)).is_integer() else -1
def find_next_square(sq):
    root = sq ** 0.5
    if (root % int(root) == 0):
        return (root + 1) ** 2
    return -1
find_next_square=lambda sq: (lambda sqrt: (sqrt+1)**2 if sqrt**2==sq else -1)(int(sq**0.5))
def find_next_square(s):
    return -1 if s**0.5%1!=0 else (s**0.5+1)**2

这个也比较有意思:

def find_next_square(sq):
    n = int(sq ** 0.5)
    if not sq - n ** 2:
        return (n+1)**2
    
    return -1






 

猜你喜欢

转载自blog.csdn.net/qulengdai0563/article/details/80106807