Power, Sqrt

MyPow(x, n)

思路

最简单的想法就是用一个for-loop,把x乘以n遍。

在主函数里面处理正负问题,在子函数里面处奇偶问题。

public class Solution {
    public double myPow(double x, int n) {
        if(n < 0) {
            return 1 / helper(x, -n);
        } else {
            return helper(x, n);
        }
    }

    public double helper(double x, int n) {
        if(n == 0) {
            return 1.0;
        }
        if(n == 1) {
            return x;
        }

        double num = helper(x, n / 2);

        if(n % 2 == 0) {
            return num * num;
        } else {
            return num * num * x;
        }
    }
}

Iterative的做法

// problem : when n = min_value, will have problem.
public class Solution {
    public double myPow(double x, int n) {
        if(n < 0) {
            n = -n;
            x = 1 / x;
        } else if(n == 0) {
            return 1;
        } 

        double res = 1;
        while(n > 0) {
            // when n is odd
            if((n & 1) == 1) {
                res *= x;
            }

            x *= x;
            n >>= 1;
        }       
        return res;
    }
}

69. Sqrt(x)

题意:从小于x的数中找出两个数的积是 x。 left = 1, right = x / 2 + 1.

方法:二分查找法。通过定左右界的方法,每次砍掉不满足条件的一半,直到这两个界相遇。

results matching ""

    No results matching ""