【剑指offer】16.数值的整数次方

16.数值的整数次方

面试题

难度中等14

实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。

 

示例 1:

输入: 2.00000, 10
输出: 1024.00000
​

示例 2:

输入: 2.10000, 3
输出: 9.26100
​

示例 3:

输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25

1.暴力

如果n<0 x= 1/x n = -n 遍历求解 result = result * x;

time:O(n)

space:O(1)

public double myPow(double x, int n) {
        if(n<0){//如果负数 1/x  n = -n
            x = 1/x;
            n = -n;
        }
​
        double result = 1.0f;
        for(int i = 0;i<n;i++){
            result = result *x;
        }
        return result;
    }

2.快速幂算法

time : O(logn)

space:O(logn)

public double myPow(double x, int n) {
        if(n<0){//如果负数 1/x  n = -n
            x = 1/x;
            n = -n;
        }
​
        return quickPow(x,n);
    }
​
    public double quickPow(double x,int n){
        if(n == 0){
            return 1.0f;
        }
​
        double half = quickPow(x,n/2);
​
        if((n & 1) == 0){
            return  half * half;
        }else{
            return  half * half * x;
        }
    }

3.快速幂算法-循环版

time : O(logN)

space:O(1)

public double myPow(double x, int n) {
        if(n == 0){
            return 1;
        }
​
        if(n < 0){
            x = 1/x;
            n = -n;
        }
​
        double result = 1;
​
        for(int i = n;i>=0;i/=2){
            if((i & 1) == 1){
                result *= x;
            }
            x *= x;
        }
​
        return result;
    }

 

posted @ 2020-04-03 11:05  qxlxi  阅读(72)  评论(0编辑  收藏  举报