示例 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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/powx-n
public double myPow(double x, int n) {
//核心思想主要还是折半,把原本比较大的这个幂变成原来的一半,这样结果就可以通过这个一半的幂相乘来组成了
if (n == 0) {//任何数的0次幂都是1
return 1;
}
//把这个问题转换成更小的问题进行解决
double half = myPow(x,n/2);
//如果是个偶数的话,就正好是一半幂的乘积
if (n%2 == 0) {
return half*half;
}
//如果是奇数并且n>0的话
if(n > 0) {
return half*half*x;
}
return half*half/x;
}
经典的把一个相对较大的问题使用折半的方法转换成较小的问题,代码注释中也写明了解释。
还有另一种相同的思想,只是用循环来实现的,如下:
public double myPow(double x, int n) {
double res = 1.0;
int i = n;
while (i != 0) {
//如果是奇数,那么还要多乘一个x
if (i%2 != 0) {
res *= x;
}
//偶数直接自我平方
x *= x;
//折半
i /= 2;
}
//判断n的正负来返回正确答案
return n < 0 ? 1/res : res;
}
【Java实现 pow(x, n) ,即计算 x 的 n 次幂函数。】
推荐阅读
- 数据结构与算法|【算法】力扣第 266场周赛
- leetcode|今天开始记录自己的力扣之路
- Python|Python 每日一练 二分查找 搜索旋转排序数组 详解
- 【LeetCode】28.实现strstr() (KMP超详细讲解,sunday解法等五种方法,java实现)
- LeetCode-35-搜索插入位置-C语言
- leetcode python28.实现strStr()35. 搜索插入位置
- Leetcode Permutation I & II
- python|leetcode Longest Substring with At Most Two Distinct Characters 滑动窗口法
- LeetCode 28 Implement strStr() (C,C++,Java,Python)
- Python|Python Leetcode(665.非递减数列)