zoukankan      html  css  js  c++  java
  • 【每日一题】Leetcode50. Pow(x,n)

    题目大意: 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn )。

    如下:
    x→x2→x4→x8→x16→x32→x64

    比如从 x 开始,每次直接把上一次的结果进行平方,计算 6 次就可以得到 x^{64}. x64
    的值,而不需要对 x 乘 63 次 x。

    再举一个例子,如果我们要计算 x^77
    ,我们可以按照:

    x→x2→x4→x9→x19→x38→x77的顺序 将上一次的结果进行平方
    在每一步中,我们不知道在将上一次的结果平方之后,还需不需要额外乘 xx。但如果我们从右往左看,分治的思想就十分明显了:

    当我们要计算 x^n时,我们可以先递归地计算出 y = x^{n/2}.
    ,其中 [a] 表示对 a 进行下取整;

    根据递归计算的结果,如果 nn 为偶数,那么 x^n = y^2;如果 n 为奇数,那么 x^n=y2 × x;

    题解:

    class Solution {
        public double myPow(double x, int n) {
            long N = n;
            //如果是负数的话就是导数了
            return N>=0? quickMul(x,N) : 1.0/quickMul(x,-N);
        }
    
        public double quickMul(double x,long N){
            if (N == 0){
                return 1.0;
            }
    
            double y = quickMul(x,N/2);
            return N%2 == 0 ? y*y : y*y*x;
        }
    }
    
  • 相关阅读:
    poj 3074(DLX)
    zoj 3209(DLX)
    hdu 4531(模拟+BFS+DFS)
    hdu 2065(递推+矩阵优化)
    poj 3714 (最近点对)
    zoj 3690(递推+矩阵优化)
    poj 3076(DLX)
    hdu 4533(一种很巧妙的方法|线段树+扫描线)
    hdu 4513(模拟)
    sql server 2008 评估已过期。
  • 原文地址:https://www.cnblogs.com/windWheel/p/15779423.html
Copyright © 2011-2022 走看看