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)

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