[LeetCode] Pow(x, n) (二分法)

Implement pow(x, n).

刚开始没想到,后来看remlost的博客才写出来,代码很简练:

class Solution {
public:
    double pow(double x, int n) {
        if(n<0)
            return 1/power(x,-n);
        else
            return power(x,n);
    }
private:
    double power(double x, int n){
        if(n==0)
            return 1;

        double v = power(x,n/2);
        if(n%2==0)
            return v*v;
        else
            return v*v*x;

    }

};

[LeetCode] Pow(x, n) (二分法)

时间: 2024-10-13 11:18:24

[LeetCode] Pow(x, n) (二分法)的相关文章

LeetCode: Pow(x, n) [049]

[题目] Implement pow(x, n). [题意] 实现pow(x, n) [思路] 最直接的思路是用一个循环,乘n次的x. 当n的值较小的时候还好,当n非常大时,时间成本就非常高.加入n=INT_MAX, 也就是21亿多次循环,你可以试想一下. 在这种情况下,我们需要快速的乘完n个x,采用尝试贪心的方法,即滚雪球方式的翻倍相乘 注意:几种特殊情况 1. n=0: 2. n<0; [代码] class Solution { public: double pow(double x, in

LeetCode: Pow(x, n) 解题报告

Pow(x, n) Implement pow(x, n). SOLUTION 1: 使用二分法. 1. 负数的情况,使用以下的公式转化为求正数power,另外,考虑到MIN_VALUE可能会造成越界的情况,我们先将负数+1: X^(-n) = X^(n + 1) * XX^n = 1/(x^(-n)) 2. Base case: pow = 0, RESULT = 1; 3. 正数的时候,先求n/2的pow,再两者相乘即可. 当n = -2147483648 必须要特别处理,因为对这个数取反会

[leetcode]Pow(x, n) @ Python

原题地址:https://oj.leetcode.com/problems/powx-n/ 题意:Implement pow(x, n). 解题思路:求幂函数的实现.使用递归,类似于二分的思路,解法来自Mark Allen Weiss的<数据结构与算法分析>. 代码: class Solution: # @param x, a float # @param n, a integer # @return a float def pow(self, x, n): if n == 0: return

LeetCode——Pow(x, n)

Implement pow(x, n). 原题链接:https://oj.leetcode.com/problems/powx-n/ public double pow(double x, int n) { if(n== 0) return 1; if(n == 1) return x; if(n % 2 ==0) return pow(x*x,n/2); else{ if(n > 0) return x*pow(x*x,n/2); else return pow(x*x,n/2)/x; } }

leetcode pow(x,n)实现

题目描述: 自己实现pow(double x, int n)方法 实现思路: 考虑位运算.考虑n的二进制表示形式,以n=51(110011)为例,x^51 = x^1*x^2*x^16*x^32,因此每次将n无符号右移一位,并将x取当前值的平方,如果n右移后末位 为1,则将res*x.考虑特殊情况,当n为Integer.MIN_VALUE时,此时-n=Integer.MAX_VALUE+1,我第一次就是没有考虑到这个边界情况出错的... 该方法通过扫描n的二进制表示形式里不同位置上的1,来计算x

[LeetCode] Pow(x, n) 求x的n次方

Implement pow(x, n). 这道题让我们求x的n次方,如果我们只是简单的用个for循环让x乘以自己n次的话,未免也把LeetCode上的想的太简单了,一句话形容图样图森破啊.OJ因超时无法通过,所以我们需要优化我们的算法,使其在更有效的算出结果来.我们可以用递归来折半计算,每次把n缩小一半,这样n最终会缩小到0,任何数的0次方都为1,这时候我们再往回乘,如果此时n是偶数,直接把上次递归得到的值算个平方返回即可,如果是奇数,则还需要乘上个x的值.还有一点需要引起我们的注意的是n有可能

LeetCode -- Pow(x, n)

题目描述: Implement pow(x, n). 思路: 如果n为偶数:MyPow(x,n) = MyPow(x,n/2) 的平方如果n为奇数:MyPow(x,n) = x * MyPow(x, (n-1)/2)的平方 实现代码: public class Solution { public double MyPow(double x, int n) { if(n <= 2){ return Math.Pow(x, n); } if(n % 2 == 0){ var y = MyPow(x,

[LeetCode] Pow(x, n) 二分搜索

Implement pow(x, n). Hide Tags Math Binary Search 题目很简单的. class Solution { public: double pow(double x, int n) { if(n==0) return 1; bool nNeg = false; long long int nn = n; if(n<0){ nn = - nn ; nNeg =true; } bool xNeg = false; if(x<0){ x = -x; if(n%

LeetCode Pow(x, n) (水题)

题意: 求浮点型x的n次幂结果. 思路: logN直接求,注意n可能为负数!!!当n=-2147483648的时候,千万别直接n=-n,这样的结果是多少?其他求法大同小异. 1 class Solution { 2 public: 3 double myPow(double x, int n) { 4 if(n==0) return 1; 5 int m=n>0?1:-1; 6 double ans=1; 7 long long b=(long long)n*m; 8 while(b) 9 {