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.

  • 相关阅读:
    django项目环境搭建备忘
    Python IDE的选择和安装
    MAC上python环境搭建
    hadoop1.2.1+hbase0.90.4+nutch2.2.1+elasticsearch0.90.5配置(伪分布式)
    ubuntu下hadoop完全分布式部署
    ubuntu下集群设置静态ip
    C语言调用库函数实现生产者消费者问题
    poj 1703(带权并查集)
    poj 1330
    poj1724
  • 原文地址:https://www.cnblogs.com/acetseng/p/4703184.html
Copyright © 2011-2022 走看看