题目描述:

实现 pow(x, n) ,即计算 x 的 n 次幂函数。

示例 1:

输入: 2.00000, 10
输出: 1024.00000

示例 2:

输入: 2.10000, 3
输出: 9.26100

示例 3:

输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25

说明:

-100.0 < x < 100.0
n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。

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


解题思路1:

1、采用快速幂的做法,如果 n 是偶数,则 Pow(x, n) = Pow(x, n/2) * Pow(x, n/2)
如果 n是奇数,则 Pow(x, n) = Pow(x, n-1) * x
2、需要注意一些特殊情况,当 n<0, n=0, n=1 的情况需要提前处理


代码1:

class Solution(object):def myPow(self, x, n):if n < 0:x = 1.0/xn *= -1elif n == 0:return 1elif n == 1:return xif ( n % 2 == 0):half = self.myPow(x, n/2)return half * halfelse:return (self.myPow(x, n-1)) * x

测试代码示例:

s = Solution()
x = 2.00000
y = -2
print(s.myPow(x,y))

代码2:

#include<iostream>
using namespace std;double myPow(double x, long n) {if(n<0){x = 1.0/x;n *= -1;}else if(n==0){return 1;}else if(n==1){return x;}if(n%2==0){double half = myPow(x, n/2);return half*half;}else{return myPow(x, n-1) * x;}
}int main()
{double x;long y;x = 2.00000;y = -2;cout << myPow(2.00000,-2) << endl;return 0;}

解题思路2:

使用递归算法解决


python:

class Solution(object):def myPow(self, x, n):if n == 0: return 1if n < 0:  return 1/self.myPow(x, -n)ans = self.myPow(x, n/2)if n % 2 == 0:return ans*anselse:return ans*ans*x

来源于: leetcode

class Solution:def myPow(self, x, n):def quickMul(N):if N == 0:return 1.0y = quickMul(N // 2)return y * y if N % 2 == 0 else y * y * xreturn quickMul(n) if n >= 0 else 1.0 / quickMul(-n)

C++:

//递归算法
class Solution {public:double myPow(double x, long n) {if(n == 0) return 1;if(n < 0) return 1/myPow(x,-n);double ans = myPow(x,n/2);if(n % 2 == 0){return ans*ans;}else{return ans*ans*x;}}
};

解题思路3: 暴力方法,超出时间限制

class Solution {public:double myPow(double x, int n) {int sign = (n > 0)?1:-1;double ans = 1;n = abs(n);while(n-- > 0)ans *= x;return (sign == 1)?ans:1/ans;}
};

参考链接:
leetcode 50. Pow(x, n)

leetcode--50--Pow(x, n)相关推荐

  1. 【分治】LeetCode 50. Pow(x, n)

    LeetCode 50. Pow(x, n) Solution1:我的答案 偷鸡摸狗的做法 class Solution { public:double myPow(double x, int n) ...

  2. c语言的 pow函数是快速幂吗,leetcode 50. Pow(x, n)(快速幂)

    就是一个二分法快速幂. 但是需要注意的问题是这里是实数,而且n可能为负. int的范围是-2,147,483,648 至 2,147,483,647.如果为-2,147,483,648那么直接n=-n ...

  3. Leetcode 50. Pow(x, n)

    50. Pow(x, n) Total Accepted: 96891 Total Submissions: 348858 Difficulty: Medium Implement pow(x, n) ...

  4. LeetCode 50. Pow(x, n)(二分查找)

    文章目录 1. 题目 2. 二分查找 2.1 递归 2.2 循环 1. 题目 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 示例 输入: 2.00000, 10 输出: 1024.000 ...

  5. leetCode 50.Pow(x, n) (x的n次方) 解题思路和方法

    Pow(x, n) Implement pow(x, n). 思路:题目不算难.可是须要考虑的情况比較多. 详细代码例如以下: public class Solution {public double ...

  6. leetcode 50. Pow(x, n) 快速幂

    好像没怎么快 #include <iostream> #include <math.h> using namespace std;class Solution {public: ...

  7. leetcode 50. Pow(x,n)

    题目 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 解法 快速幂 利用二进制运算的性质 class Solution {public:double myPow(double x, int ...

  8. [Leetcode]50. Pow(x, n)

    Implement pow(x, n). 我的做法就比较傻了.排除了所有的特殊情况(而且double一般不可以直接判断==),然后常规情况用循环来做.- -||| 直接用循环,时间复杂度就比较大.应该 ...

  9. leetcode || 50、Pow(x, n)

    problem: Implement pow(x, n). Hide Tags Math Binary Search 题意:求x的n次幂 thinking: (1)最简单想到的是直观上的数学幂函数求法 ...

  10. 【LeetCode】50. Pow(x, n) (3 solutions)

    Pow(x, n) Implement pow(x, n). 按照定义做的O(n)肯定是TLE的. 利用这个信息:x2n = (xn)2 有个注意点,当n为负是,直接取反是不可行的. 由于int的表示 ...

最新文章

  1. redis-full-check
  2. OpenCV学习(7.10)
  3. 连锁加盟网站源码_连锁60秒:招商只是开始,养商才最重要
  4. C程序设计--排序(冒泡、选择、插入)--插入
  5. opencv学习(二十四)之腐蚀与膨胀
  6. MATLAB 2017a 下载及安装
  7. 仿淘宝Banner:左右滑动ViewPager+最后一张滑动查看详情
  8. 人民搜索笔试题2013
  9. 正则表达式 -验证身份证号
  10. 【愚公系列】2022年10月 基于WPF的智能制造MES系统框架-简介
  11. 杨洋告诉你实时异地容灾的重要性
  12. 埃拉托色尼筛法(素数筛)
  13. 不要过于积极表现自己
  14. 实施工作20190313
  15. 开题报告的国内外研究现状怎么写呢?
  16. Isolation Forest 孤立森林
  17. 一个35岁技术经理的忠告:在职场多点雷霆手段,少点菩萨心肠!
  18. 安装和使用所见即所得WYSIWYG的 Web 创作软件 BlueGriffon
  19. 对比度受限直方图均衡化CLAHE算法原理及Opencv C++代码实现
  20. 很值得收藏的安卓开源控件库

热门文章

  1. 解决java.io.FileNotFoundException: class path resource [beans.xml] cannot be opened because it does no
  2. [附源码]计算机毕业设计springboot新能源汽车租赁
  3. java 超时重试机制_Java之Retry重试机制详解
  4. 【idea系列】插件之Rainbow Brackets
  5. LightOJ 1319 - Monkey Tradition CRT除数互质版
  6. SpringBoot入门——Thymeleaf简单使用
  7. Java中以时钟的效果显示时间
  8. linux 限制带宽命令,怎样在 Linux 中限制网络带宽使用
  9. (十八)享元模式详解(都市异能版)
  10. Hoops 官网学习资料