面试题16. 数值的整数次方
2020-03-09 本文已影响0人
人一己千
题目
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
示例 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] 。
注意:本题与主站 50 题相同:https://leetcode-cn.com/problems/powx-n/
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法
需要考虑的点:
- x=0.0的情况;
- n为负数正数为0的情况;
- n数量级非常大,有可能超时。
思路:
最简单的办法就是先处理特殊值:x=0单独考虑,n为负数则结果倒数一下,用循环有多少x乘n次。
但是当n数值非常大的时候就很容易超时了,所以需要借助以下公式:
转化成递归形式:
class Solution:
def myPow(self, x: float, n: int) -> float:
if x == 0 : return 0 # x等于0作为特殊情况处理,实际上并不等于0
if n == 0 : return 1 # 循环结束的条件
if n < 0 :
n = -n
x = 1/x
result = self.myPow(x, n>>1) # 通过右移作为除2
result *= result
if n&1 ==1: # 通过和1做与运算 判断奇偶数
result *= x
return result
总结
递归思想。