題目大意: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