LeetCode 50. Pow(x, n)

LeetCode 50. Pow(x, n

Description

Implement pow(x, n), which calculates x raised to the power n (xn).

Example

在这里插入图片描述

Note

  • -100.0 < x < 100.0
  • n is a 32-bit signed integer, within the range [−231, 231 − 1]

Code

  • java
class Solution {
    // -1 -2147483648
    public double myPow(double x, int n) {
        if(n == Integer.MIN_VALUE) {
            if(Math.abs(Math.abs(x) - 1) < 1e-6) return 1;
            return 0;
        }
        double result = 1.0;
        boolean neg = n < 0 ? true : false;
        if(neg) n = -n;
        while(n != 0) {
            if((n & 1) == 1) result *= x;
            x *= x;
            n = n >> 1;
        }
        if(neg) result = 1.0 / result;
        return result;
    }
}
  • My Modified Solution
public class Solution {
    public double myPow(double x, int n) {
        if(n == Integer.MIN_VALUE) {
            if(Math.abs(Math.abs(x) - 1) < 1e-6) {
                return 1;
            }
            return 0;
        }
        double result = 1.0;
        if(n < 0) {
            x = 1.0 / x;
            n = -n;
        }
        while(n != 0) {
            if((n & 1) == 1) result *= x;
            x *= x;
            n >>= 1;
        }
        return result;
    }
}
  • Others’ Solution
public class Solution {
    public double myPow(double x, int n) {
        if(n<0) return 1/x * myPow(1/x, -(n+1));
        if(n==0) return 1;
        if(n==2) return x*x;
        if(n%2==0) return myPow( myPow(x, n/2), 2);
        else return x*myPow( myPow(x, n/2), 2);
    }
}

Conclusion

  • 注意负数的边界
  • 负数的时候计算换1.0 / x会快一些
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值