目录

​一,题目描述​

​中文描述​

​示例与说明​

​二,解题思路​

​三,AC代码​

​Java​

​四,解题过程​

​第一搏​


 

一,题目描述

中文描述

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

示例与说明

LeetCode_Math_50. Pow(x, n)【缩小误差,分治】【java】【中等】_leetcode

 

来源:力扣(LeetCode)
链接:​​​https://leetcode-cn.com/problems/powx-n​​ 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二,解题思路

举个例子。

当求2^10时,只需求出2^5,然后直接return (2^5) * (2^5)

同理,求2^5时,只需求出2^2,然后return (2) * (2^2) * (2^2)即可。

求2^1时,直接返回2即可。

需要注意!!!

当指数小于0时,要计算1 / (x^n),而不是(1/x)^n。后者先计算1/x,这种计算方式存在误差,而在后面累乘时会放大这种误差,从而导致结果出错。

三,AC代码

Java

class Solution {
public double myPow(double x, int n) {
if (x == 0) return 0;
if (n < 0) return 1 / getPow(x, 0 - n);// 当n为负时,计算1 / (x^n),而不是(1/x)^n
else return getPow(x, n);
}
public double getPow(double x, int n) {
if (x == 0) return 0;
else if (n == 0) return 1;
else if (n == 1) return x;
else {
double ans = getPow(x, n / 2);
if (n % 2 == 0) return ans * ans;
else return x * ans * ans;
}
}
}

四,解题过程

第一搏

在精度问题上耗了一些时间,分治算法还是比较容易想到的。

LeetCode_Math_50. Pow(x, n)【缩小误差,分治】【java】【中等】_精度_02