leetcode--50--Pow(x, n)

题目描述:

实现 pow(x, n) ,即计算 x 的 n 次幂函数。

示例 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

说明:

-100.0 < x < 100.0
n 是 32 位有符号整数,其数值范围是 [231, 2311]

题目链接:https://leetcode-cn.com/problems/powx-n


解题思路:

1、采用快速幂的做法,如果 n 是偶数,则 Pow(x, n) = Pow(x, n/2) * Pow(x, n/2)
如果 n是奇数,则 Pow(x, n) = Pow(x, n-1) * x
2、需要注意一些特殊情况,当 n<0, n=0, n=1 的情况需要提前处理


代码1:

class Solution(object):
    def myPow(self, x, n):
        """
        :type x: float
        :type n: int
        :rtype: float
        """
        if n < 0:
            x = 1.0/x
            n *= -1
        elif n == 0:
            return 1
        elif n == 1:
            return x

        if ( n % 2 == 0):
            half = self.myPow(x, n/2)
            return half * half
        else:
            return (self.myPow(x, n-1)) * x

测试代码示例:

s = Solution()
x = 2.00000
y = -2
print(s.myPow(x,y))

代码2:

#include<iostream>
using namespace std;


double myPow(double x, long n) {
    if(n<0){
        x = 1.0/x;
        n *= -1;
    }else if(n==0){
        return 1;
    }else if(n==1){
        return x;
    }

    if(n%2==0){
        double half = myPow(x, n/2);
        return half*half;
    }else{
        return myPow(x, n-1) * x;
    }
}

int main()
{
	double x;
	long y;
	x = 2.00000;
	y = -2;
	cout << myPow(2.00000,-2) << endl;

	return 0;

}

//暴力方法,超出时间限制
class Solution {
public:
    double myPow(double x, int n) {
        int sign = (n > 0)?1:-1;
        double ans = 1;
        n = abs(n);
        while(n-- > 0)
            ans *= x;
        return (sign == 1)?ans:1/ans;
    }
};

//递归算法
class Solution {
public:
    double myPow(double x, long n) {
        if(n == 0) return 1;
        if(n < 0) return 1/myPow(x,-n);
        double ans = myPow(x,n/2);
        if(n % 2 == 0)
        {
            return ans*ans;
        }
        else{
            return ans*ans*x;
        }
    }
};

参考链接:
leetcode 50. Pow(x, n)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章