今日题目(剑指Offer系列)
剑指 Offer 16. 数值的整数次方
实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。 不得使用库函数,同时不需要考虑大数问题。
示例:
示例 1: 输入:x = 2.00000, n = 10 输出:1024.00000 示例 2: 输入:x = 2.10000, n = 3 输出:9.26100 示例 3: 输入:x = 2.00000, n = -2 输出:0.25000 解释:2-2 = 1/22 = 1/4 = 0.25
解题思路:
>本题目使用快速幂计算 >快速幂就是将底数进行平方,幂数进行减半 >不断执行该操作,最终底数的幂数会变成0 >其结果为1,但是中间幂数会发生不能够整除的情况 >这时幂数就会向下取整,就会多出一个底数来 >最终的结果就会等于多个不能整除情况下产生的底数相乘
Python解法:
class Solution: def myPow(self, x: float, n: int) -> float: if x==0: return 0 if n<0: x=1/x n=-n res=1 while n!=0: if n&1==1: res*=x x*=x n>>=1 return res
Java解法:
class Solution { public double myPow(double x, int n) { if (x == 0) { return 0; } if (n < 0) { x = 1 / x; n = -n; } double res = 1; while (n != 0) { if ((n & 1) == 1) { res *= x; } x *= x; n >>>= 1; } return res; } }