leetcode--50--Pow(x, n)
题目描述:
实现 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)相关推荐
- 【分治】LeetCode 50. Pow(x, n)
LeetCode 50. Pow(x, n) Solution1:我的答案 偷鸡摸狗的做法 class Solution { public:double myPow(double x, int n) ...
- c语言的 pow函数是快速幂吗,leetcode 50. Pow(x, n)(快速幂)
就是一个二分法快速幂. 但是需要注意的问题是这里是实数,而且n可能为负. int的范围是-2,147,483,648 至 2,147,483,647.如果为-2,147,483,648那么直接n=-n ...
- Leetcode 50. Pow(x, n)
50. Pow(x, n) Total Accepted: 96891 Total Submissions: 348858 Difficulty: Medium Implement pow(x, n) ...
- LeetCode 50. Pow(x, n)(二分查找)
文章目录 1. 题目 2. 二分查找 2.1 递归 2.2 循环 1. 题目 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 示例 输入: 2.00000, 10 输出: 1024.000 ...
- leetCode 50.Pow(x, n) (x的n次方) 解题思路和方法
Pow(x, n) Implement pow(x, n). 思路:题目不算难.可是须要考虑的情况比較多. 详细代码例如以下: public class Solution {public double ...
- leetcode 50. Pow(x, n) 快速幂
好像没怎么快 #include <iostream> #include <math.h> using namespace std;class Solution {public: ...
- leetcode 50. Pow(x,n)
题目 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 解法 快速幂 利用二进制运算的性质 class Solution {public:double myPow(double x, int ...
- [Leetcode]50. Pow(x, n)
Implement pow(x, n). 我的做法就比较傻了.排除了所有的特殊情况(而且double一般不可以直接判断==),然后常规情况用循环来做.- -||| 直接用循环,时间复杂度就比较大.应该 ...
- leetcode || 50、Pow(x, n)
problem: Implement pow(x, n). Hide Tags Math Binary Search 题意:求x的n次幂 thinking: (1)最简单想到的是直观上的数学幂函数求法 ...
- 【LeetCode】50. Pow(x, n) (3 solutions)
Pow(x, n) Implement pow(x, n). 按照定义做的O(n)肯定是TLE的. 利用这个信息:x2n = (xn)2 有个注意点,当n为负是,直接取反是不可行的. 由于int的表示 ...
最新文章
- redis-full-check
- OpenCV学习(7.10)
- 连锁加盟网站源码_连锁60秒:招商只是开始,养商才最重要
- C程序设计--排序(冒泡、选择、插入)--插入
- opencv学习(二十四)之腐蚀与膨胀
- MATLAB 2017a 下载及安装
- 仿淘宝Banner:左右滑动ViewPager+最后一张滑动查看详情
- 人民搜索笔试题2013
- 正则表达式 -验证身份证号
- 【愚公系列】2022年10月 基于WPF的智能制造MES系统框架-简介
- 杨洋告诉你实时异地容灾的重要性
- 埃拉托色尼筛法(素数筛)
- 不要过于积极表现自己
- 实施工作20190313
- 开题报告的国内外研究现状怎么写呢?
- Isolation Forest 孤立森林
- 一个35岁技术经理的忠告:在职场多点雷霆手段,少点菩萨心肠!
- 安装和使用所见即所得WYSIWYG的 Web 创作软件 BlueGriffon
- 对比度受限直方图均衡化CLAHE算法原理及Opencv C++代码实现
- 很值得收藏的安卓开源控件库
热门文章
- 解决java.io.FileNotFoundException: class path resource [beans.xml] cannot be opened because it does no
- [附源码]计算机毕业设计springboot新能源汽车租赁
- java 超时重试机制_Java之Retry重试机制详解
- 【idea系列】插件之Rainbow Brackets
- LightOJ 1319 - Monkey Tradition CRT除数互质版
- SpringBoot入门——Thymeleaf简单使用
- Java中以时钟的效果显示时间
- linux 限制带宽命令,怎样在 Linux 中限制网络带宽使用
- (十八)享元模式详解(都市异能版)
- Hoops 官网学习资料