题目分析:[[EVD]] - 剑指 Offer 16. 数值的整数次方https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof/
简单描述:
- 实现 pow(x, n) ,不得使用库函数,同时不需要考虑大数问题。
限制🚫
- -100.0 < x < 100.0
示例:
输入:x = 2.00000, n = 10
输出:1024.00000
解题思路:
思路:
- #快速幂 类似于二分法
- ⚠️:int32 变量 n∈[−2147483648,2147483647] ,因此当 n = -2147483648时执行 n = -n会因越界而赋值出错
效率:
- 时间复杂度
- 空间复杂度
代码:
class Solution
{
public:
double myPow(double x, int n)
{
if (x == 0)
return 0;
double res = 1;
long tmp = n;
if (n < 0)
{
x = 1.0 / x;
tmp = -tmp; // 不能写成 tmp = -n, 当数据为MIN_INT时,执行-n会越界
}
while (tmp)
{
if (tmp & 1)
res *= x;
x *= x;
tmp >>= 1;
}
return res;
}
};