题目描述:给定一个 double 类型的浮点数 base 和 int 类型的整数 exponent。求 base 的exponent 次方。

Solutions

一刷

  拿到之后实现了一个初级的版本,发现只通过了 40%,看到 bad case 原来是还有很重要的情况没有考虑到,幂取负数呢?!简单的循环怎么行?

# -*- coding:utf-8 -*-
class Solution:
    def Power(self, base, exponent):
        # write code here
        if base == 0 and exponent == 0:
            return 0
        if exponent == 0:
            return 1
        res = 1
        for i in range(1, exponent + 1):
            res *= base
        
        return res

  做一个正负判断是可以实现的:

# -*- coding:utf-8 -*-
class Solution:
    def Power(self, base, exponent):
        # write code here
        if base == 0 and exponent == 0:
            return 0
        if exponent == 0:
            return 1
        res = 1
        if exponent > 0:
            iters = exponent
        else:
            iters = -exponent
        for i in range(1, iters + 1):
            if exponent < 0:
                res *= 1 / base
            else:
                res *= base
        
        return res

  其实上面的代码有问题啊,首先是重复判断 exponent 小于零后计算好多次 base 的倒数,太耗时。二一个是输入的 base 可能是浮点型,怎么可以直接判断它是否‘等于’零呢?!

# -*- coding:utf-8 -*-
class Solution:
    def equal(self, n1, n2):
        if (n1 - n2) > -0.0000001 and (n1 - n2) < 0.0000001:
            return True
        else:
            return False
        
    def Power(self, base, exponent):
        # write code here
        if self.equal(base, 0) and exponent == 0:
            return 0
        if exponent == 0:
            return 1
        res = 1
        if exponent > 0:
            iters = exponent
        else:
            iters = -exponent
        for i in range(1, iters + 1):
            res *= base
        if exponent > 0:
            return res
        else:
            return 1 / res

二刷

  看之前一刷的解法实在幼稚,很明显是最慢的 $O(n)$,这样面试官应该是不会满意的。

References

  1. 数值的整数次方