ouyunfu 发表于 2020-5-11 20:31
难道不能用**
不能,算作弊
永恒的蓝色梦想 发表于 2020-5-11 20:15
过了,但是你的代码没有 return res
忘记了,已修改
Twilight6 发表于 2020-5-11 20:08
久违的每日一题
自己实现,这属于作弊
我是来学习的
永恒的蓝色梦想 发表于 2020-5-11 20:38
自己实现,这属于作弊
emmm,不属于吧 是你题目没说清楚
因为**又不是轮子,现在我订正了
慢慢来最快
难道以后要和那边同步了吗{:10_312:}{:10_258:}
def mypow(a,b):
result = 1
if b==0:
return 1
elif b > 0:
while b>0:
result=result*a
b-=1
else:
while b<0:
result = result/a
b += 1
return result
class Solution:
def myPow(self, x: float, n: int) -> float:
if x == 0.0: return 0.0
res = 1
if n < 0: x, n = 1 / x, -n
while n:
if n & 1: res *= x
x *= x
n >>= 1
return res
Twilight6 发表于 2020-5-11 21:14
emmm,不属于吧 是你题目没说清楚
因为**又不是轮子,现在我订正了
咦?**不是轮子?谁告诉你的?
March2615 发表于 2020-5-11 21:26
难道以后要和那边同步了吗
哪边?
永恒的蓝色梦想 发表于 2020-5-11 21:49
哪边?
Leetcode呀
March2615 发表于 2020-5-11 21:54
Leetcode呀
嗯?
我去看了一下……这次凑巧
永恒的蓝色梦想 发表于 2020-5-11 21:49
咦?**不是轮子?谁告诉你的?
**属于python的算术运算符呀?怎么定义成轮子了?
Twilight6 发表于 2020-5-11 22:24
**属于python的算术运算符呀?怎么定义成轮子了?
emmm……想了一下,**应该算是轮子,不过是自带的{:10_327:}
永恒的蓝色梦想 发表于 2020-5-11 22:28
emmm……想了一下,**应该算是轮子,不过是自带的
{:10_245:}好吧, 那也没事 我订正了你帮我看看我代码有没什么问题嘿嘿{:10_297:}
Twilight6 发表于 2020-5-11 20:08
久违的每日一题
x=0.00001,n=2147483647 超时
永恒的蓝色梦想 发表于 2020-5-11 22:37
x=0.00001,n=2147483647 超时
{:10_245:}{:10_245:}{:10_245:}瑟瑟发抖....
好吧 我放弃了...改天看标准答案吧{:10_277:}
Twilight6 发表于 2020-5-11 22:40
瑟瑟发抖....
好吧 我放弃了...改天看标准答案吧
没有标准答案https://fishc.com.cn/static/image/smiley/ARU/aru-1x-1_005.png
1.暴力求解,肯定超时,但是可以根据暴力求解优化
def myPow_0(x: float, n: int)-> float:
ans = 1.0
if n == 0:
return ans
for i in range(1, abs(n) + 1):
ans *= x
return ans if n > 0 else 1.0 / ans# 处理n为负数的方法
2.进行优化,不要乘n次,而是每次乘平方,对n的基偶进行判断,奇数要额外乘一个x(用递归特别容易理解)
def myPow_1(x: float, n: int)-> float:
def helper(N: int):
if N == 0:
return 1.0
y = helper(N // 2)
return y * y * x if N % 2 else y * y
return helper(n) if n >= 0 else 1.0 / helper(-n)
3.想到一个以前做过的题,用1,2,4,8,16,32,64,128的加法组合表示1-255的数(二进制)
和这题比较像,转化为n用这些数表示,然后幂相加就是数相乘
def myPow_2(x: float, n: int) -> float:
if n == 0:
return 1.0
N, ans = abs(n), 1.0
x_order = ans * x
while N:
if N % 2:
ans *= x_order
x_order *= x_order
N //= 2
return ans if n > 0 else 1.0 / ans
4.理解了之后,就可以用位运算符中的右移运算符
def myPow_3(x: float, n: int) -> float:
N, ans = abs(n), 1.0
while N:
if N & 1:
ans *= x
x *= x
N >>= 1
return ans if n >= 0 else 1.0 / ans
我还是最喜欢3{:10_277:}