Algorithm之二分治应用之pow(x,n)

[size=medium][b]设计算法,求 x 的 n 次幂:pow(x, n)[/b][/size]


[b]算法一[/b]

public class Solution {

/*
* Solution 1: Time Limit Exceeded
*
* Test Case:
* x = 0.00001
* n = 2147483647
*/
public double myPow(double x, int n) {
if(x == 0) return 0;
if(n == 0) return 1;
boolean neg = false;
if(n < 0){
neg = true;
n = -n;
}
double r = 1;
while(n > 0){
r *= x;
n--;
}
if(neg) r = 1 / r;
return r;
}

}




[b]算法二[/b]

public class Solution {

/*
* Solution 2: Divider and Conquer
*
* NOTE: 1
* // if(x == 0) return 0;
* // if x = +0, and m is less than 0, the result is positive Infinity.
*
* NOTE: 2
* // 如果 m 是偶数:则直接返回 half * half
* // 如果 m 是奇数:则直接需要在偶数的基础上,再补上一位。
* // 这一位是 m / 2 时,舍掉的那一位。
*-----------------------------------------------
*/
public double myPow(double x, int m) {
if(m == 0) return 1;
double half = myPow(x, m / 2);

double val = half * half;
if(m % 2 == 0) // 偶数:正、负
return val;
else{

if(m > 0) // 奇数:正
return val * x;
else // 奇数:负
return val * (1 / x);
}
}
}




-
引用:
https://leetcode.com/problems/powx-n


-
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值