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

一:解题思路

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

第二种方法:要用到二分搜索的思想在里面。

二:完整代码示例 (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);
    }
}

猜你喜欢

转载自www.cnblogs.com/repinkply/p/12449711.html
今日推荐