mirror of
https://github.com/CyC2018/Interview-Notebook.git
synced 2026-10-31 11:05:36 +00:00
Update 16. 数值的整数次方.md
调整递归时间复杂度的公式表述,补充负数指数及 Integer.MIN_VALUE 边界溢出的处理说明。
This commit is contained in:
@@ -14,12 +14,11 @@
|
||||
|
||||
本题中子问题是 x<sup>n/2</sup>,在将子问题合并时将子问题的解与自身相乘即可。但如果 n 不为偶数,那么拆成两半还会剩下一个 x,在将子问题合并时还需要多乘一个 x。
|
||||
|
||||
|
||||
|
||||
<div align="center"> <img src="pics/pow-divide.png" width="620px"/> </div><br>
|
||||
|
||||
因为 x<sup>n/2</sup> 可以通过递归求解,并且每次递归 n 都减小一半,因此整个算法的时间复杂度为 O(logN)。
|
||||
|
||||
因为 (x\*x)<sup>n/2</sup> 可以通过递归求解,并且每次递归 n 都减小一半,因此整个算法的时间复杂度为 O(logN)。
|
||||
n 为负数时,先把 x 换成 1/x,再求 x 的 -n 次方。需要注意的是,n 为 Integer.MIN_VALUE 时 -n 会溢出,因此先转成 long 再取反。
|
||||
|
||||
```java
|
||||
public double myPow(double x, int n) {
|
||||
|
||||
Reference in New Issue
Block a user