LeetCode Implement pow(x, n).

这个题目我也没有思路,同学们可以查看这个http://www.cnblogs.com/NickyYe/p/4442867.html

下面是我改进后的代码

第一种方法:

class Solution {
public:
    double myPow(double x, int n) {
        if (0 == n)return 1;
        double half = myPow(x, n / 2);
        if (!(n % 2))
            return half*half;
        else if (n>0)
        {
            return half*half*x;
        }
        else
        {
            return half*half*(1 / x);
        }
    }
};

第二种方法:

if (0 == n)return 1;
        double result = 1.0;
        bool tag = false;
        double num=1.0;
        if(n==-2147483648)
        {
            n=1+n;
            num=x;
        }
        if (n<0)
        {
            n = -n;
            tag = true;
        }
        while (n)
        {
            if (n & 1)
            {
                result *= x;
            }
            x = x*x;
            n = n >> 1;
        }
        if (tag)
        {
           if(0.999999<num&&num<1.000001)
            return 1 / result;
            else return 1/result*num;
        }
        if(0.999999<num&&num<1.000001)
        return result;
        else return result*num;
    }
};
时间: 2024-11-29 03:37:07

LeetCode Implement pow(x, n).的相关文章

LeetCode 50 Pow(x, n)(Math、Binary Search)(*)

翻译 实现pow(x, n). 原文 Implement pow(x, n). 分析 首先给大家推荐维基百科: zh.wikipedia.org/wiki/二元搜尋樹 en.wikipedia.org/wiki/Binary_search_tree 其次,大家也可以看看类似的一道题: LeetCode 69 Sqrt(x)(Math.Binary Search)(*) 然而这题我还是没有解出来,看看别人的解法-- class Solution { private: double myPowHel

[LeetCode][JavaScript]Pow(x, n)

Pow(x, n) Implement pow(x, n). https://leetcode.com/problems/powx-n/ 注意x和n都可能是负数. 递归求解,比如求3的4次方,可以拆成3的2次方相乘:3的5次就是3^2相乘再乘2. 1 /** 2 * @param {number} x 3 * @param {number} n 4 * @return {number} 5 */ 6 var myPow = function(x, n) { 7 if(n >= 0){ 8 ret

LeetCode:Pow(x, n)

1.题目名称 Pow(x, n)(求指定数字x的整数次幂) 2.题目地址 https://leetcode.com/problems/powx-n/ 3.题目内容 英文:Implement pow(x, n) 中文:给定底数x和指数n,求x的n次幂 4.解题方法1 在Java中,有一个偷懒的办法是这样实现的: /**  * 功能说明:LeetCode 50 - Pow(x, n)   * 开发人员:Tsybius2014  * 开发时间:2015年8月8日  */ public class So

【LeetCode】Pow(x, n)

Implement pow(x, n). 思路:快速幂运算,需要考虑指数为负数,同时底数为0的情况,这种属于异常数据,代码里没有体现. class Solution { public: double pow_abs(double x, unsigned int n) { if (n == 0) { return 1; } if (n == 1) { return x; } double res = pow(x, n>>1); res *= res; if (n & 0x1 == 1)

[LeetCode]75. Pow(x,n)幂运算

Implement pow(x, n). Subscribe to see which companies asked this question 解法1:最简单的即是n个x直接相乘,毫无疑问会超时Time Limit Exceeded class Solution { public: double myPow(double x, int n) { if(x < 0.000001) return 0; if(n == 0) return 1; if(n < 0) return 1.0 / my

LeetCode 之 Pow(x, n)(分治法)

[问题描述] Implement pow(x, n). 1.[基础知识] 1)分治的意识,一道O(N)的算法题,琢磨出O(lgN)的思想出来就是要求: 2.[屌丝代码] 卡壳的地方: 1.Time Limit Exceeded. #include <vector> #include <iostream> #include <algorithm> #include <vector> #include <string> using namespace

LeetCode 050 Pow(x, n)

题目要求:Pow(x, n) Implement pow(x, n). 代码如下: class Solution { public: //采用二分法 //时间复杂度 O(logn),空间复杂度 O(1) double pow(double x, int n) { //要考虑n < 0的情况! if(n < 0) return 1.0 / power(x, -n); else return power(x, n); } double power(double x, int n){ if(n ==

Java for LeetCode 050 Pow(x, n)

Implement pow(x, n). 解题思路: 直接使用乘法实现即可,注意下,如果n很大的话,递归次数会太多,因此在n=10和n=-10的地方设置一个检查点,JAVA实现如下: static public double myPow(double x, int n) { if(n==1) return x; else if(n>1&&n<=10) return myPow(x,n-1)*x; if(n>10) return myPow(myPow(x,10),n/10

leetcode 二分法 Pow(x, n)

Pow(x, n) Total Accepted: 25273 Total Submissions: 97470My Submissions Implement pow(x, n). 题意:求x的n次幂 思路:二分法 n有可能是负的或正的 当n为负是,pow(x, n) = 1/pow(x, -n) x^n = x^{n/2} * x^{n/2}* x^{n%2} 复杂度:时间O(log n).空间O(1) double power(double x, int n){ if(n == 0) re