每日刷题(4)——剑指 Offer 16. 数值的整数次方
创始人
2024-05-29 11:18:57
0

本篇文章题目来源于leetcode

前言

哈喽,大家好,我是小雨,今天做了一些剑指 Offer的题目,其中 16. 数值的整数次方 写了4版代码才通过,给我留下了深刻的印象。此题对时间的要求简直严格,但是从另一方面也给了做题者突破自己,优化代码的强大动力,非常不错。本文就对此题进行细致的分析吧!

Question 剑指 Offer 16. 数值的整数次方

实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。

示例 1:

输入:x = 2.00000, n = 10
输出:1024.00000

提示:

  • -100.0 < x < 100.0
  • -231 <= n <= 231-1
  • -104 <= xn <= 104

Solution

这题的尝试了很多思路,大部分都超时了,最后使用快速幂算法进行解题,具体的思维过程如下:

1.看到这道题,首当其中的就是暴力法,即首先判断n是否是负数,如果是负数那么后续要进行倒数的操作,随后需要求解x的N次方的值,根据n的次数,反复执行*x的操作即可,代码如下,结果超时,后续的思路主要优化求解x的N次方的值,对正负判定不做优化。

2.我们可以发现x的N次方等于x的(N/2)次方乘以x的(N-N/2)次方,所以我们只需要求出x的(N/2)次方的值 y 即可,再求出y*y即可得出结果,代码如下,还是超时。

3.再次观察,发现其实只有最后一步进行了优化,x的(N/2)次方的值还是用累乘得出。再次优化,我们可以使用递归,把求x的N次方转化为求x的(N/2)次方x的(N-N/2)次方,形成了类似树的结构,进行递归操作即可得出答案,代码如下,还是超时!

4.再次观察,发现递归中,使用了类似树的结构,是先求左边,再求右边,递归求解,但是实际上,只需要求一边的结果(如左边)即可,另一边的结果可以通过左边的结果得出来!其实到这一步,就是快速幂算法了,代码如下,终于成功通过。

Code

//第一种思路func myPow(x float64, n int) float64 {flag := false if n < 0 {flag = truen = -n }temp := xx = 1 for i := 0; i < n; i++ {x*=temp}if flag {x = 1/x }return x}//第二种思路func myPow(x float64, n int) float64 {flag := false if n < 0 {flag = truen = -n }temp := xx=1if n %2 == 0 {for i := 0; i < n/2; i++ {x*=temp}x *=x}else {for i := 0; i < n/2; i++ {x *= temp}x *=xx *=temp}if flag {x = 1/x}return x}//第三种思路func myPow(x float64, n int) float64 {flag := falseif n < 0 {flag = truen = -n}var dfs func(n int)float64dfs = func(n int) float64 {if n == 0 {return 1 }else if n == 1 {return x}l:=dfs(n/2)r:=dfs(n-(n/2))return l * r}x = dfs(n)if flag {x = 1/x}return x
}//第四次思路
func myPow(x float64, n int) float64 {flag := falseif n < 0 {flag = truen = -n}var dfs func(n int)float64dfs = func(n int) float64 {if n == 0 {return 1 }else if n == 1 {return x}y := dfs(n/2) if n%2 == 0 {return y*y}else{return y*y*x}}x = dfs(n)if flag {x = 1/x}return x
}

相关内容

热门资讯

特朗普与内塔尼亚胡切断联络? 本报特约记者 王 逸据土耳其阿纳多卢通讯社9日报道,美国总统特朗普决定切断与以色列总理内塔尼亚胡的直...
今天起,结婚离婚不需要户口本 修订后的《婚姻登记条例》自5月10日起施行。《条例》修订的主要内容包含三个方面:一是增加婚姻家庭服务...
【提振消费在行动】春季车展成绩... 转自:鹤岗发布  由商务局、东山区、兴安区、市工商联主办,市融媒体中心、市汽车协会承办的此次车展,创...
人鱼的眼泪作者这次说了3个好听 转自:河北新闻网 【#人鱼的眼泪作者这次说了3个好听# ...
划归本土防御指挥部,美拟调整其... 当地时间5月9日,三位知情人士称,特朗普政府官员正在权衡一项调整方案,将美国在格陵兰岛的安全利益责任...
伤员回归新援融入,海港逆转海牛... 主场连续输给成都蓉城与北京国安之后,本轮坐镇白玉碗面对尚处降级区的青岛海牛,上海海港势在必得。开场6...
智通ADR统计 | 5月10日 周五美股三大股指涨跌不一,恒生指数ADR下跌,按比例计算,收报22812.13点,较香港收市跌55....
走进长春!120个网红打卡地之... 2024年,长春在100个网红打卡地发布基础上又一次解锁20个新晋网红打卡地,长春网红打卡地增至12...
新华财经早报:5月10日 转自:新华财经•李强主持召开国务院常务会议 研究深化国家级经济技术开发区改革创新有关举措•中国人民银...
强生宣布特诺雅达、特诺雅在华获... 来源:@经济观察报微博行业动态 经济观察网讯 强生公司5月9日宣布,特诺雅达®(古塞奇尤单抗注射液(...
人民日报:永远不能忘却的纪念 转自:北京日报客户端80年前的伟大胜利打败了不可一世的法西斯势力,带给世人恒久的启迪:光明必将驱散黑...
一周重点活动回顾(0503-0...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会! (转自:信达证券研究...
红星美凯龙“五一”销售额增长2... 乐居财经 严明会 5月9日,据红星美凯龙全国商场统计数据显示,五一大促期间销售额同比增长28%。据悉...
追星赶月的首席科学家,用奋斗书... 转自:国资小新小新说日前,全国劳动模范和先进工作者表彰名单发布,中央企业400多位奋斗者榜上有名。他...
不搞AI的,不是好汽车公司 作者 |张力邢昀近期,李想带着他的VLA 司机大模型再谈AI,距离上一次他开诚布公地谈AI 和理想的...
关注妇幼优化服务 竞技提升科普...     健康科普节目呼吁大家关注自闭症儿童。    本报记者宋延康 摄  本报讯(记者廖欣)5月9日...
李洱的“超低空飞行”,会带领读... 转自:上观新闻《超低空飞行:同时代人的写作》是作家李洱的最新文学笔记,他透过一个个写作者(他者与自己...
好当家集团现重要股权变动,唐爱... 来源:泰山财经泰山财经记者 李迪近日,好当家集团有限公司(简称“好当家集团”)发生重要股权变动,冯永...
两台好戏只用四名演员,人艺口碑... 转自:北京日报客户端几个月前,《迷幻》作为北京人民艺术剧院跨年新戏首演,对角色关系抽丝剥茧的追寻、对...
三星统一视觉风格,One UI... IT之家 5 月 10 日消息,科技媒体 Android Authority 昨日(5 月 9 日)...