题目:
实现函数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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof
思路:
直接使元素相乘会超出运行时间。可以采用分治思想,用递归实现。
Python解法:
1 class Solution: 2 def myPow(self, x: float, n: int) -> float: 3 if n < 0 and x != 0: 4 return 1.0 / self.myPow(x, -n) 5 6 if n == 0: 7 return 1 8 9 if n & 1: # n是奇数 10 return x * self.myPow(x, n-1) 11 return self.myPow(x*x, n>>1)
C++解法:
1 class Solution { 2 public: 3 double myPow(double x, long n) { // n应改为长整型,防止超出数据范围 4 if(n < 0 && x != 0) 5 return 1 / myPow(x, -n); 6 if(n == 0) 7 return 1; 8 if(n & 1) 9 return x * myPow(x, n-1); 10 return myPow(x*x, n/2); 11 } 12 };