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

相关内容

热门资讯

Davis Commoditi... 吴说获悉,新加坡农产品贸易商 Davis Commodities(纳斯达克代码:DTCK)宣布正在评...
建行房贷计算器2022最新版,...   现在很多家庭都是贷款买房的,经济压力也比较大,一般大家很少全款付的。找银行贷款,也是减轻压力,只...
湖北产假2022最新政策,产假...   近年来我国的生育率不断下降,为了提高生产率,保护妇女权益。国家调整了一系列生育政策。其中产假,是...
请问写作文,有没有套路,技巧? 请问写作文,有没有套路,技巧?要详细点,不要复制,谢谢。没什么特别的技巧,最重要的是多阅读。读的多了...
动漫中有哪些“扮猪吃老虎”的装... 动漫中有哪些“扮猪吃老虎”的装弱主角?其实有很多的斗破苍穹各种动漫的,其实就是扮猪吃老虎,算是满足了...
有你我坐拥天下,没你我依然伟大... 有你我坐拥天下,没你我依然伟大。是什么意思?有你坐拥天下,意思是你很有地位,依靠你他能得到同样的高地...
《穷人》一文的体裁是不是短篇小... 《穷人》一文的体裁是不是短篇小说《穷人》一文的体裁是短篇小说,作者是列夫·托尔斯泰。
我做了别人的小三? 我做了别人的小三?你这稀里糊涂,自己被人坑,还坑了别人,确实尽早抉择,不然真的就是咱害人害己了!
为什么夜晚会出现紫色天空? 为什么夜晚会出现紫色天空?我们这边现在几乎每天晚上都是天空都是紫色的有没有人能找到标准答案这是为什么...
初中生教育方法14岁的男孩子聪... 初中生教育方法14岁的男孩子聪明,但没有学习兴趣。如何培养孩子的学习兴趣?楼主说得有道理 弟子规是东...