zoukankan      html  css  js  c++  java
  • leetcode刷题-50Pow(x, n)

    题目

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

    思路

    最初的想法n>0计算res = res*x 计算n次,n<0,将x取倒数后同理,但结果表明计算速度太慢了。

    后续应该采用快速幂的算法。这里的本质是分治的思想,

    递归:例如当 n = 8 时,x^8 = (x^4)^2 = ((x^2)^2)^2,当n= 9 时x^9 = (x^4)^2*x = ((x^2)^2)^2

    迭代:9 = 1001 x^9 = x^(8*1) * x^(4*0) * x^(2 *0)*x^(1*1),因此可以利用n的二进制数来拆分求解

    实现

    递归

    class Solution:
        def myPow(self, x: float, n: int) -> float:
            if n <0:
                x = 1/x
                n = -n
            def mul(n):
                a = n//2
                b = n%2
                if n == 0:
                    return 1.0
                else:
                    y = mul(a)
                    if b == 0:
                        return y*y
                    else:
                        return y*y*x
            result = mul(n)
            return result

     迭代

    class Solution:
        def myPow(self, x: float, n: int) -> float:
            if n <0:
                x = 1/x
                n = -n
            result = 1
            while n > 0:
                if n%2 == 1:
                    result *= x
                x *= x
                n = n//2
            return result
  • 相关阅读:
    acm常见错误-持续更新
    学习之旅
    快速幂
    写个管理自我的小工具
    Tree构建
    Sql server学习
    asp.net webAPI学习
    AngularJS数据双向绑定
    虚拟机学习
    wps学习
  • 原文地址:https://www.cnblogs.com/mgdzy/p/13426867.html
Copyright © 2011-2022 走看看