c/c++ 力扣 LeetCode 50.Pow(x,n)

题目链接

力扣 50.Pow(x,n)

不想戳的看下图
c/c++ 力扣 LeetCode 50.Pow(x,n)_第1张图片
这里,我们给出4种解法。

解法一:直接返回函数值

return pow(x,n);
//注:pow是计算以x为底的n次方值

解法二:暴力求解

代码如下:

class Solution {
public:
    double myPow(double x, int n) {
        double result = 1;
        if (n < 0) x = 1 / x, n = -n;
        for (int i = 0; i < n; ++i)
            result *= x;
        return result;
    }
};

解法三:二分

暴力求解是直接循环一遍,复杂度较高,对于如此庞大的数据根本受不了。
于是我们在此使用分治,将其转换为若干个子问题求解。

代码如下:

class Solution {
public:
    double myPow(double x, int n) {
        if (!n) return 1;
        if (n < 0) n = -n, x = 1 / x;
        return n & 1 ? x * myPow(x * x, n >> 1) : myPow(x * x, n >> 1);
    }
};

解法四:迭代

代码如下:

class Solution {
public:
    double myPow(double x, long n) {
        if (!n) return 1;
        if (n < 0) n = -n, x = 1 / x;
        double result = 1;
        while (n > 0) {
            if (n & 1) result *= x;
            x *= x, n >>= 1;
        }
        return result;
    }
};

小结

这题比较基础,可是要想得到满分,还需运用上多种算法帮助,希望同学们可以由此领悟到算法之美。

你可能感兴趣的:(c++,算法,算法,leetcode,c++,c语言)