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) return 1;
	double v = power(x, n/2);
	if(n%2 == 0) return v * v;
	else return v * v * x;
}

double pow(double x, int n){
	if(n > 0){
		return power(x, n);
	}else{
		return 1/power(x, -n);
	}
}

时间: 2024-10-14 16:52:06

leetcode 二分法 Pow(x, n)的相关文章

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 之 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 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 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 ==

[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

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#50 Pow(x, n)

Just... Implement pow(x, n). Solution: 1)Naive solution:multiply x by itself for n-1 times. (Or simply reyurn 1 if n==0). This takes O(n) time. When n is big enough, it's relatively slow. 2)Fast Power. Take pow(3, 11) as an example. Here's what we're