博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Leetcode]Pow(x, n)-Python递归+快速幂
阅读量:4163 次
发布时间:2019-05-26

本文共 991 字,大约阅读时间需要 3 分钟。

[Leetcode]Pow(x, n)

题目描述

实现 pow(x, n) ,即计算 x 的 n 次幂函数。

示例 1:

输入: 2.00000, 10
输出: 1024.00000

示例 2:

输入: 2.10000, 3
输出: 9.26100

示例 3:

输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25

说明:

-100.0 < x < 100.0
n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。

解题思路
  • 快速幂算法,本质上是 分治算法
    • 举个例子,如果我们要计算 x 64 x^{64} x64,我们可以按照:
      在这里插入图片描述
      的顺序,从 x x x 开始,每次直接把上一次的结果进行平方,计算 6 6 6 次就可以得到 x 64 x^{64} x64 的值,而不需要对 x x x 63 63 63 x x x
    • 再举一个例子,如果我们要计算 x 65 x^{65} x65,我们可以在上面结果的基础上再乘一个 x x x 得到结果。
    • 所以,当我们需要计算 x n x^n xn 时,我们可以先递归的计算出 y = x ⌊ n / 2 ⌋ y = x^{\lfloor n/2 \rfloor} y=xn/2,其中 ⌊ a ⌋ \lfloor a \rfloor a 表示对 a a a 进行下取整;根据递归的结果,如果 n n n 为偶数,那么结果为 y 2 y^2 y2 ,如果 n n n 为奇数,那么结果为 y 2 ∗ x y^2*x y2x
实现代码
class Solution:    def myPow(self, x: float, n: int) -> float:        def helper(x, n):            if n == 0: //递归结束条件                return 1            tmp = helper(x,n//2)            return  tmp * tmp if n % 2 == 0 else tmp * tmp * x        res = helper(x, abs(n))        return res if n > 0 else 1 / res

转载地址:http://fyoxi.baihongyu.com/

你可能感兴趣的文章
古月居 PyTorch入门:一起从零搭建神经网络 六、PyTorch车牌字符识别项目三
查看>>
古月居 PyTorch入门:一起从零搭建神经网络 七、PyTorch车牌字符识别项目四
查看>>
搜索旋转排序数组 II
查看>>
最大子序和
查看>>
爬楼梯
查看>>
汉明距离
查看>>
二叉树的最大深度
查看>>
N 叉树的最大深度
查看>>
合并二叉树
查看>>
翻转二叉树
查看>>
反转链表
查看>>
剑指 Offer 52. 两个链表的第一个公共节点 & 相交链表
查看>>
剑指offer 03.数组中的重复数字(四种办法!哎,就是全!)
查看>>
三层--对你的认识再多一点
查看>>
数据库初级篇--EA & ER & SQL Server
查看>>
配置文件--初出茅庐
查看>>
11月英语--慢慢回温
查看>>
One for all, all for one
查看>>
离线安装.net framework3.5
查看>>
抽象工厂+反射(一)
查看>>