
文章图片

实现 pow(x n), 即计算 x 的 n 次幂函数(即 , xn) 。 不得使用库函数 , 同时不需要考虑大数问题 。
示例
- 输入:x = 2.00000 n = 10
- 输出:1024.00000
- -100.0 < x < 100.0
- -2的31次方 <= n <= 2的31次方 -1
- -10的4次方 <= x的n次方 <= 10的4方
以示例为例 , 从 2 开始 , 每次直接把上一次的结果进行平方 , 计算3次就可以得到2的10次方值 , 我们可以按照:
- x → x的2次方 → x的5次方 → x的10次方的顺序 。
代码如下:
复杂度分析
- 时间复杂度:O(logn) , 即为递归的层数(由于每次递归都会使得指数减少一半) 。
- 空间复杂度:O(logn) , 即为递归的层数 。 这是由于递归的函数调用会使用栈空间 。
我们以 x 的77次方 作为例子:
- x → x的2次方 → x的4次方→ x的9次方 → x的19次方 → x的38次方 → x的77次方;
- x的38次方 到 x的77次方 中额外乘的 x 在 x的77次方 中贡献了 x;
- x的9次方 到 x的19次方 中额外乘的 x 在 之后被平方了 2 次 , 因此在 x的77次方 中贡献了 x的4次方;
- x的4次方 到 x的9次方 中额外乘的 x 在之后被平方了 3 次 ,因此在 x的77次方 中贡献了 x的8次方;
- 最初的 x 在之后被平方了 6 次 , 因此在 x的77次方 中贡献了 x的64次方 。
这样以来 , 我们从 x开始不断地进行平方 , 如果n的第 k 个(从右往左 , 从 0 开始计数)二进制位为 1 , 那么我们就将对应的贡献
x的(2的k次方)次方 计入答案 。
代码如下:
复杂度分析
- 时间复杂度:O(logn) , 即为对 n 进行二进制拆分的时间复杂度 。
- 空间复杂度:O(1) 。
好兄弟可以点赞并关注我 , 全部都是干货 。
推荐阅读
- 多层感知机还在进步,关于深度学习中MLP的5篇最新的论文推荐
- Celo算法稳定币+公链赛道的加密货币,类似去中心化的支付宝
- 一加9RT评测:半年过去了,表现依旧不错的
- 大连地铁三号线车厢内,男子口罩拉至下巴处咳嗽引周围乘客不适
- 阿里刚发布的新玩意,解决无数打工人的头等难题
- 女子在陌生男子怀里入睡,并未遭到旁人谴责,为何?女子:我好累
- 闯红灯多久能收到短信?最快和最慢相差十几天,安全天数要记准!
- 1986年非洲“杀人湖”一夜夺走1700人生命,将水抽干后,揪出凶手
- 人工智能项目的十条建议--概念篇