草庐IT

50. Pow(x, n)

ReganYue 2023-04-20 原文

50. 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

-2^31 <= n <= 2^31-1

-10^4 <= xn <= 10^4

来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/powx-n

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

  1. 这道题考察了什么思想?你的思路是什么?

    说到求幂函数,我不得不说一下快速幂了,快速幂的递归版本还是比较好理解的,我们先来讲一下快速幂吧,快速幂的本质是分治算法,比如我们要计算x^8:

    可以有: x -> x^2 -> x^4-> x^8

    我们只需将上一次结果进行平方,进行3次即可得到x^8。

    而如果我们想求x^19,可以有:

    x -> x^2 -> x^4 -> x^9 -> x^19

    因为我们需要从右到左进行推理,所以可以用到递归的思想。

    当我们计算x^19时,先计算y = x[n/2],[a]表示向下取整。如果n为偶数,那么上一个数的平方为xn,如果n为奇数,那么上一个数的平方再乘x为x^n。

  2. 做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?

    不是一次通过的,边界条件没有处理好,也就是递归出口刚开始没有搞好。

  3. 有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?

    class Solution {
        public double myPow(double x, int n) {
            double res = 1.0;
            for(int i = n; i != 0; i /= 2){
                if(i % 2 != 0){
                    res *= x;
                }
                x *= x;
            }
            return  n < 0 ? 1 / res : res;
        }
    } 
    

三、AC 代码:

func myPow(x float64, n int) float64 {
 if n >= 0 {
     return Mul(x, n)
 }
 return 1.0 / Mul(x, -n)
}

func Mul(x float64, n int) (res float64) {
 if n == 0 {
     return 1
 }
 y := Mul(x, n/2)
 if n%2 == 0 {
      res = y * y
      return
 }
 res =  y * y * x
 return 
}

四、总结:

其实AC代码用到的快速幂方法还有非递归方法,即用迭代方法。那样空间复杂度也能减小到O(1)。

有关50. Pow(x, n)的更多相关文章

  1. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  2. ruby-on-rails - OSX Yosemite 更新破坏了 pow.cx - 2

    升级到OSXYosemite后,我现有的pow.cx安装不起作用。升级到最新的pow.cx无效。通过事件监视器重新启动它也没有成功。 最佳答案 卸载(!)并重新安装解决了这个问题。curlget.pow.cx/uninstall.sh|shcurlget.pow.cx|sh 关于ruby-on-rails-OSXYosemite更新破坏了pow.cx,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q

  3. ruby-on-rails - 使用 Pow 作为服务器在 RubyMine 中调试 - Ruby 2.1.1 + Rails 4 - 2

    我已经开始使用RubyMine6。我正在处理Rails4、Ruby2.1.1项目。我无法找到如何使用Pow作为服务器调试到RubyMine。你能给我指明正确的方向吗? 最佳答案 我能够使用远程调试从RubyMine进行调试。我正在使用RubyMine6、Rails3、Ruby2.1.1。首先创建一个.powenv文件并添加:exportRUBY_DEBUG_PORT=1234exportPOW_WORKERS=1将以下gem添加到您的Gemfile:gem'ruby-debug-ide'gem'debase'创建一个新的初始化器st

  4. ruby-on-rails - 解决 ruby​​ 中的旅行商问题(50 多个位置) - 2

    我在一家express公司工作。我们目前通过“手动”解决了50多个位置路线。我一直在考虑使用GoogleMapsAPI来解决这个问题,但我读到有24分的限制。目前我们在服务器中使用Rails,所以我正在考虑使用ruby​​脚本来获取50多个位置的坐标并输出合理的解决方案。您会使用什么算法来解决这个问题?Ruby是解决这类问题的好编程语言吗?你知道任何现有的ruby​​脚本吗? 最佳答案 这可能是您正在寻找的:警告:此站点被firefox标记为攻击站点-但我似乎没有。其实我之前用过没问题[检查URL的修订历史]rubyquiz似乎已关

  5. ruby - Pow、RVM 和 ZSH 不能一起工作 - 2

    我正在尝试让Octopress(http://octopress.org/)正常工作,但我遇到了一些问题。我正在使用POW(http://pow.cx/),它似乎没有为我加载正确的Ruby版本(使用RVM)。它始终使用RVM默认的ruby​​版本,而不是.rvmrc中指定的版本。我在RVM中的默认Ruby版本是:ruby-1.9.3-p125。在我的.rvmrc文件中我有这个:rvmuse1.9.2我在访问我的网站时在浏览器中收到此错误:LoadError:cannotloadsuchfile--bundler/setup~/.rvm/rubies/ruby-1.9.3-p125/li

  6. ruby - "Pow is installed"现在出现在我所有的网站上 - 2

    我为我正在开发的Rails应用安装了带有RVM的Pow。没关系。其他网站现在都说“已安装Pow”。我确定这是一个简单的设置,但我找不到它。有人遇到过这个吗?我在SnowLeopard上运行MAMP。 最佳答案 Pow将更改您的DNS解析,将所有以.dev或.test结尾的域路由到本地计算机(以命中pow)。如果您想同时使用MAMP和POW,您需要暂时关闭pow以便它可用(或者您可以使用80以外的其他端口更改MAMP设置)。要关闭pow,我建议安装powdergem:geminstallpowderpowderdown您还可以使用po

  7. javascript - 无法使用 AJAX 上传大于 50kb 的文件 - 2

    虽然我在本地主机上工作正常,但我不确定为什么我的下面的代码不能处理我主机上任何大于50kb的文件。我测试了许多不同的文件大小,我很确定50kb是它的极限。如果文件大于50kb,则永远不会将其传递给process.php。如果一个文件小于50kb,它会被传递给process.phpok。有没有人可以帮我解决这个问题。我被这个问题困了几个小时。我确实在php.ini中将upload_max_filesize设置为5M。$(document).ready(function(){$('#img_uploader').on('change',function(){uploadFiles(this

  8. javascript - 为什么 Math.pow(1, NaN) 在 JavaScript 中等于 NaN? - 2

    在IEEE754-2008节"9.2.1Specialvalues"有提到pow(+1,y)is1foranyy(evenaquietNaN)如果没有阅读整个文档,维基百科给出了shortcut:The2008versionoftheIEEE754standardsaysthatpow(1,qNaN)andpow(qNaN,0)shouldbothreturn1sincetheyreturn1whateverelseisusedinsteadofquietNaN.为什么Math.pow(1,NaN)在JavaScript中是NaN?不符合标准吗? 最佳答案

  9. javascript - 当 a 为负数且 b 为非整数时,为什么 Math.pow(a, b) 为 NaN? - 2

    这个问题在这里已经有了答案:Math.powwithnegativenumbersandnon-integerpowers(2个答案)关闭8年前。我观察到以下Javascript行为:>Math.pow(4,2)16>Math.pow(4,2.1)18.37917367995256>Math.pow(4,0.5)2>Math.pow(-4,2)16>Math.pow(-4,2.1)NaN>Math.pow(-4,0.5)NaN为什么给一个负数和一个非整数但有理数,使Math.pow返回NaN?例如,为什么Math.pow(4,0.5)不是NaN而是Math.pow(4,-0.5)是Na

  10. javascript - a^b 的 RegEx 而不是 pow(a,b) - 2

    这是一个有趣的例子。任何人都有一个很好的正则表达式来将所有(first)^(second)转换为Math.pow((first),(second))?编辑:我目前为止最好的是s=s.replace(/((?:\d+\.?\d*)|\w+|\((?:(?:[^\(\)]*(?:\([^\(\)]*\)))*)\))\s*\^\s*((?:\d+\.?\d*)|\w+|\((?:(?:[^\(\)]*(?:\([^\(\)]*\)))*)\))/g,'Math.pow($1,$2)')//replaceexpression^expressionwithMath.pow($1,$2)到目前为

随机推荐