《剑指offer》第16题 数值的整数次方

数值的整数次方

https://www.nowcoder.com/practice/1a834e5e3e1a4b7ba251417554e07c00?tpId=13&tqId=11165&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

最直观的想法是,求n次方,就乘n次,那么时间复杂度是O(n)。进行优化就考虑二分。


首先考虑特殊情况,指数为0,结果必为1,指数为1,结果为当前底数的值。还有就是底数为负数的情况,以及奇数二分时会多一个数。
图片说明

public class Solution {
    public double Power(double base, int exponent) {
    if (exponent == 0)
        return 1;
    if (exponent == 1)
        return base;
//之前是递归结束的判断,现在是正文。用一个变量记录底数是否正负,正的是本身,负的是倒数
    boolean isNegative = false;
    if (exponent < 0) {
        exponent = -exponent;
        isNegative = true;
    }
    double pow = Power(base * base, exponent / 2);
    if (exponent % 2 != 0)  //当指数是奇数时,二分会多一个数,因此可以在递归完成后再乘
        pow = pow * base;
    return isNegative ? 1 / pow : pow;
  }
}

刷刷题

全部评论

相关推荐

09-17 10:53
四川大学 C++
牛客91242815...:会写标书没有任何卵用,鉴定为横向垃圾导师的受害者
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务