zoukankan      html  css  js  c++  java
  • LeetCode#50 Pow(x, n)

    Just...

    Implement pow(x, n).

    Solution:

    1)Naive solution:multiply x by itself for n-1 times. (Or simply reyurn 1 if n==0).

    This takes O(n) time. When n is big enough, it's relatively slow.

    2)Fast Power.

    Take pow(3, 11) as an example. Here's what we're gonna do:

    represent 11 as a binary number, which is bn=1011. Assign x to a new variable base=x, and set result as 1.

    iterate digits in bn from rear to head,

        1._if the current digit is 1, result is multiplied by base;

        2._if the current digit is 0, result will remain unchanged;

        3._alter base: base=base * base.

    The reversed iteration of binary digits can alse be replaced by a series of dived-and-mod operations on n.

    Mathematics behind it:

    Each n has a baniry version. And we know: pow(a, m+n)=pow(a, m)*pow(a, n).

    Thus pow(3, 11)=pow(3, 1)*pow(3, 2)*pow(3, 8).

    When iterating over these binary digits backwards, 1 means the corresponding power of base is multiplied to

    the final result, and 0 means not.

     1     # @param {float} x
     2     # @param {integer} n
     3     # @return {float}
     4     def myPow(self, x, n):
     5         pz=1
     6         if n<0:
     7             pz=-1
     8             n=abs(n)
     9         r=1
    10         base=x
    11         while n!=0:
    12             if n%2==1:
    13                 r*=base
    14             base*=base
    15             n/=2
    16         return r if pz==1 else 1.0/r

     Note that the sign of n should be handled.

  • 相关阅读:
    三大主营业务全面开花 京东方半年报大幅盈利(半年446亿元,同比增长69%,实现净利润43亿元)
    JS几种变量交换
    Vue2
    树的插入、删除、旋转归纳
    从两个不同的ServiceProvider说起
    集中式路由
    MongoDB 可视化管理工具
    服务发布
    Parallel
    NET WebAPi之断点续传下载(下)
  • 原文地址:https://www.cnblogs.com/acetseng/p/4703184.html
Copyright © 2011-2022 走看看