【剑指Offer】数值的整数次方 解题报告(Python)

【剑指Offer】数值的整数次方 解题报告(Python)

标签(空格分隔): LeetCode


题目地址:https://www.nowcoder.com/ta/coding-interviews

题目描述:

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

Ways

方法一:

使用循环去做。

题目中已经明确了exponent是整数。这里要考虑的是整数可能是0或者负数。

当其是正数的情况很简单,直接循环就能搞定。

当其为负数的时候,可以先求出其绝对值的结果,再取倒数。

当其为0的时候,直接返回0即可。

# -*- coding:utf-8 -*-
class Solution:
    def Power(self, base, exponent):
        if exponent < 1:
            return 1 / self.getPower(base, -exponent)
        else:
            return self.getPower(base, exponent)

    def getPower(self, base, exponent):
        if base == 0:
            return 0
        elif exponent == 1:
            return base
        res = 1
        for i in range(exponent):
            res *= base
        return res

方法二:

对求正数次方的解法可以做一个优化:

【剑指Offer】数值的整数次方 解题报告(Python)_第1张图片

这样就类似于一个求费布拉奇数列的解法,使用递归能比较快速的求出整数次方。

# -*- coding:utf-8 -*-
class Solution:
    def Power(self, base, exp):
        if exp < 1:
            return 1 / self.getPower(base, -exp)
        else:
            return self.getPower(base, exp)
    def getPower(self, base, exp):
        if exp == 0:
            return 1
        elif exp == 1:
            return base
        res = self.Power(base, exp >> 1)
        res *= res
        if exp & 1 == 1:
            res *= base
        return res

Date

2018 年 3 月 11 日

你可能感兴趣的:(算法,牛客网,剑指offer)