前端算法题解 leetcode50-Pow(x, n)

 更新时间:2022年09月23日 10:13:32   作者:前端_奔跑的蜗牛  
这篇文章主要为大家介绍了前端算法题解 leetcode50-Pow(x, n)示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

题目

题目地址

实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。

示例 1:

输入: x = 2.00000, n = 10

输出: 1024.00000

示例 2:

输入: x = 2.10000, n = 3

输出: 9.26100

示例 3:.

输入: x = 2.00000, n = -2

输出: 0.25000

解释: 2-2 = 1/22 = 1/4 = 0.25

提示:

-100.0 < x < 100.0

-231 <= n <= 231-1

-104 <= xn <= 104

解题思路-分情况讨论

本题可以分几种情况讨论:\

  • 如果 x = 1,那么无论 n 的值是多少,结果都是 1
  • 如果 n = 0,那么无论 x 的值是多少,结果都是 1
  • 如果 n = 1,那么无论 x 的值是多少,结果都是 x
  • 如果 x = -1,那么如果 n 是偶数,结果是 1,否则结果是 -1
  • 如果 n > 0,则结果为 1 *= x n
  • 如果 n < 0,则结果为 1 /= x n

代码实现

var myPow = function(x, n) {
    if(x === 1 || n === 0){
        return 1
    }
    if(x===-1){
        return n % 2 ? -1 : 1
    }
    let res = 1
    if(n>0){
        for(let i = 0;i<n;i++){
            res *= x
        }
        return res
    }
    for(let i = 0;i<-n;i++){
        res /= x
        if(x>0 && res<0.000005){
            return res
        }
    }
    return res
}

解题思路-分治

上面的解题思路虽然能解题,但是因为要真实的进行每一次计算,所以效率比较低。那如何才能提高效率呢?

这里我们可以采用类似二分的方法,将 xn 次方拆分为 x^(n/2) * x^(n/2),以此来加速计算的过程。每次拆分一半,直到 n = 0。因为每次的处理逻辑是相同的,所以可以利用递归函数递归调用自己,而退出条件就是 n = 0

代码实现

var myPow = function(x, n) {
  if(n == 0){
    return 1
  }
  if(n < 0){
    return 1 / myPow(x, -n)
  }
  if(n % 2){
    return x * myPow(x, n - 1)
  }
  return myPow(x * x, n / 2)
}

至此我们就完成了 leetcode-50-Pow(x, n),更多关于前端算法 Pow(x, n)题解的资料请关注脚本之家其它相关文章!

相关文章

  • JS面试中你不知道的call apply bind方法及使用场景详解

    JS面试中你不知道的call apply bind方法及使用场景详解

    这篇文章主要为大家介绍了JS面试中你不知道的call apply bind方法及使用场景详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 微信小程序 switch组件详解及简单实例

    微信小程序 switch组件详解及简单实例

    这篇文章主要介绍了微信小程序 switch组件详解及简单实例 的相关资料,需要的朋友可以参考下
    2017-01-01
  • JavaScript两张图搞懂原型链

    JavaScript两张图搞懂原型链

    这篇文章主要分享JavaScript的两张原型链图,我们上一篇文章介绍了JavaScript中的原型,为什么不将原型链一起介绍了呢?因为JavaScript中的原型链是一个难点,也是一个面试必问的考点,现在就来学习一下具体内容吧
    2021-12-12
  • JavaScript中直接写undefined的错误及用法剖析

    JavaScript中直接写undefined的错误及用法剖析

    这篇文章主要介绍了JavaScript中直接写undefined的用法剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 微信小程序之MaterialDesign--input组件详解

    微信小程序之MaterialDesign--input组件详解

    本篇文章主要介绍了微信小程序之MaterialDesign--input组件详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-02-02
  • 浏览器切换到其他标签页或最小化js定时器是否准时测试

    浏览器切换到其他标签页或最小化js定时器是否准时测试

    这篇文章主要为大家介绍了浏览器切换到其他标签页或最小化是js定时器是否准时的测试详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • JavaScript Broadcast Channel API使用学习

    JavaScript Broadcast Channel API使用学习

    这篇文章主要为大家介绍了JavaScript的api学习之Broadcast Channel API使用方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 带你彻底理解JavaScript中的原型对象

    带你彻底理解JavaScript中的原型对象

    这篇文章主要介绍了带你彻底理解JavaScript中的原型对象,文中有详细的代码介绍,对正在学习js的小伙伴们有一定的帮助,需要的朋友可以参考下
    2021-04-04
  • 可视化埋点元素圈选器实现源码

    可视化埋点元素圈选器实现源码

    这篇文章主要为大家介绍了可视化埋点元素圈选器实现源码示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • JavaScript ES新特性块级作用域

    JavaScript ES新特性块级作用域

    这篇文章主要介绍了JavaScript ES新特性块级作用域,所谓的块级作用域,就是该变量只能在声明时的代码块或者子代码块中使用,使JavaScript出现了块级作用域,具体详细内容请参考下面文章内容
    2021-12-12

最新评论