每日刷题(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
}

相关内容

热门资讯

杨字的含义 杨字的含义 扬:张扬,自得的意思【解释】:趾高:走路时脚抬得很高;气扬:意气扬扬。走路时脚抬得很...
有梦子的四字成语? 有梦子的四字成语?白日做梦、魂牵梦萦、如梦初醒、梦寐以求、酣然入梦、半梦半醒、重温旧梦、夜长梦多、同...
恶人自有恶人磨 恶人自有恶人磨恶人自有恶人磨 (è rén zì yǒu è rén mó)解释:凶恶成性的人自然...
相对论中,火车断桥问题的答案是... 相对论中,火车断桥问题的答案是什么?这个假设唯一只有一个问题。败伏什么叫做“同时”?“只有两个发射器...
虎什么熊的成语 虎什么熊的成语这不是闹经急转弯虎背熊腰hǔ bèi xióng yāo成语解释如虎般宽厚的背;似熊样...
《亡念之扎姆德》男主角最后跟谁... 《亡念之扎姆德》男主角最后跟谁在一起?男主石化了九年,女主每天都来和他说话,然后九年后的第二天男主解...
火影忍者动画和漫画貌似不一样,... 火影忍者动画和漫画貌似不一样,海贼王动画和漫画一样吗?总是有些偏差的吧。。个人比较忠实原作。海贼王没...
让人非我弱,得志莫离群 让人非我弱,得志莫离群像投鼠忌器一样的意思吧,我躲,不是我怕你,而是我心有顾忌.不是因为势力差距而起...
《北宋小厨师》这本书更到现在男... 《北宋小厨师》这本书更到现在男猪脚泡到李师师和李清照了吗没有0.0....还没有啊因为还没结局
路边油炸的小摊上的酱是怎么做的... 路边油炸的小摊上的酱是怎么做的!要是家用,那可以选择用芝麻浆来做主配料.芝麻浆和水要1:1(水最好是...
《超禁忌游戏-五十分之一》应该... 《超禁忌游戏-五十分之一》应该完结了吧你要的是完整版的,但负责任地告诉你,现在不可能有,有也是骗你的...
公共经济学 答案 公共经济学 答案这个真不知道~!~谢谢~!~1.D2.D3.C4.B5.C6.D7.C8.B9.B1...
证券投资学 跟投资学有什么区别 证券投资学 跟投资学有什么区别投资学包括证券投资学。投资学包括各方面的投资学,比如黄金投资,期货投资...
忘记名字了,就是男主得到系统打... 忘记名字了,就是男主得到系统打英雄联盟,在联盟里边开挂可以变身眼可以变成野怪可以身穿求这部小说名字你...
个性签名为了你我愿意变成魔于全... 个性签名为了你我愿意变成魔于全世界为敌不爱那么多,只爱一点点,别人眉来又眼去,我只偷看你一眼。不要走...
野钓实用技巧 黑坑钓鱼技巧? 野钓实用技巧 黑坑钓鱼技巧?钓什么鱼要了解鱼的习性,了解对象鱼生活在哪个水层,喜欢吃什么食物,然后根...
江哲是那本书的? 江哲是那本书的?字随云的是《随波逐流之一代军师》字守义的是《三国之宅行天下》呵呵……这两本小说的江哲...
满满的生活经历是啥意思? 满满的生活经历是啥意思?满满的生活经历,说明的是这个人的生活阅历很深。
哪部国产青春剧比较贴近现实? 哪部国产青春剧比较贴近现实?《最好的我们》比较贴近现实,讲述的就是校园爱情故事,说的就是真实的高中生...
天涯海角与君共度 出自哪首歌呢... 天涯海角与君共度 出自哪首歌呢。云中歌主题曲丝罗李宇春的丝罗你好。楼主。李宇春《丝罗》伊本丝萝愿托乔...