p10 pow(x,n) 数值的n次方(leetcode 50)

一:解题思路

第一种方法:这个题目首先可以想到的用一个循环,将x连续乘以n次,如果n小于0,则返回其倒数,如果n大于0,则直接返回其结果。Time:O(n),Space:O(1)

第二种方法:要用到二分搜索的思想在里面。Time:O(log(n)),Space:O(1)

二:完整代码示例 (C++版和Java版)

第一种方法C++

  //Time:O(n),当n非常大的时候,效率不高
//Space:O(n)
  class Solution 
  {
  public:
      double myPow(double x, int n) 
      {
          double result = 1.0;

          long N = (long)abs(n);//此处将n转化为long的目的是为了防止n为整数的最小值的时候会溢出。

          for (int i = 0; i < N; i++)
          {
              result *= x;
          }

          return n<0?(1/result):(result);
      }
  };

第一种方法:Java

class Solution
{
    public double myPow(double x, int n)
    {
          double result=1.0;
          long N = Math.abs((long)n);
          
          for(int i=0;i<N;i++)
          {
              result*=x;
          }

          return n<0?(1/result):result;
    }
}

第二种方法:C++

  class Solution 
  {
  public:
      double myPow(double x, int n) 
      {
          double result = 1.0;

          long N = abs(long(n));//此处需要注意,先要将其转化为long型,然后再求其绝对值

          while (N != 0)
          {
              if (N & 1 == 1) result *= x;
              x *= x;
              N >>= 1;
          }
          
          return n < 0 ? (1 / result) : result;
      }
  };

第二种方法:Java

class Solution
{
    public double myPow(double x, int n)
    {
          double result=1.0;
          long N=Math.abs((long)n);

          while(N!=0)
          {
              if((N&1)==1) result*=x;
              x*=x;
              N>>=1;
          }

          return n<0?(1/result):(result);
    }
}

 

Python 方法一:

class Solution:
    def myPow(self, x: float, n: int) -> float:
        result = 1.0
        N = abs(n)

        for i in range(0,N):
            result = result*x

        if n>0 :
            return result
        else:
            return 1/result

 

Python方法二:

class Solution:
    def myPow(self, x: float, n: int) -> float:
        result = 1.0
        N = abs(n)
        
        while N != 0:
            if N&1 == 1:
                result=result*x
            x=x*x
            N>>=1
        if n>0:
            return result
        else:
            return 1/result

 

posted @ 2020-03-09 17:02  repinkply  阅读(176)  评论(0)    收藏  举报