zoukankan      html  css  js  c++  java
  • leetcode|Pow(x,n)解题笔记

    Implement pow(xn).

    题目:求x的n次方

    public class Solution {
      public double myPow(double x ,int n){

        }

    }

    解题感受:这道题目在leetcode上的Difficulty是Medium,其实也不比Easy难多少,除了循环之外有几种解法:

    一,作弊~直接Math.pow(x,n),不过用前人已经实现的东西意义不大,对提高自己分析思维无任何意义;

    二,第一映像应该是n次递归相乘,时间复杂度O(n)

    public double myPow(double x ,int n){

      if(n==0){//递归出口

        return 1.0;

      }

      if(n>0){//n为正

        return x*myPow(x,n-1);

      }else{//n为负

        x = 1/x;

        if(n == Integer.MIN_VALUE){//注意int边界的处理

          return x*myPow(x,-Integer.MAX_VALUE);

        }

        return myPow(x,-n-1);

      }

    }

    三,写到这里,本来我想也就这样了,后来leetcode在submit的时候搞出了一个Time Limit Exceeded的错误,我用水得不能再水的CET水平理解半天,它这是嫌我慢,超时了,怎么办,改呗,用时过长,无非我们就从缩短递归次数开始,于是我们可以将n分为奇偶,时间复杂度为O(logn),最后Accepted的代码如下,

    public double myPow(double x ,int n){

      if(n == 0){
        return 1;
      }

      if(n<0){
        x = 1/x;
      if(n == Integer.MIN_VALUE){
        return myPow(x,Integer.MAX_VALUE)*x;
      }else{
        return myPow(x,-n);
        }
      }
      double half = myPow(x,n>>1);
      if(n%2==0){
        return half*half;
      }else{
        return x*half*half;
      }
    }

    最后。。。。。有个小问题,得出上面的代码之前,我写的是这样:

    public double myPow(double x ,int n){

      if(n == 0){
        return 1;
      }

      if(n<0){
        x = 1/x;
      if(n == Integer.MIN_VALUE){
        return myPow(x,Integer.MAX_VALUE)*x;
      }else{
        return myPow(x,-n);
        }
      }
      if(n%2==0){
        return myPow(myPow(x,n>>1),2);

      }else{
        return x*myPow(myPow(x,n>>1),2);
      }
    }

    以上代码在IDE是执行是没有问题的,可不知为啥Accept的时候搞出了 java.lang.StackOverflowError...请各位同仁指教一番这个现象!

  • 相关阅读:
    JS,JQ及时监听input值的变化,MUI的input搜索框里的清除按钮的点击监听事件
    MUI 底部弹出的选择框
    MUI 拍照或选取照片上传作为头像
    多行文本文本输入框 textarea 可点击任意地方编辑的问题
    mui dtpicker 时间的设置 以及MUI的弹窗
    MUI 样式按钮的禁用
    利用渐变实现书本的效果
    调用sqlserver中的存储过程
    XmlHelper
    面试题 数据库sql
  • 原文地址:https://www.cnblogs.com/wujunjie/p/5660881.html
Copyright © 2011-2022 走看看