剑指Offer16数值的整数次方
1. 问题描述
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
示例 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] 。
2. 代码实现
题目解析:分治思想
class Solution {
public double myPow(double x, int n) {
// 因为不清楚n是正还是负,所以需要一个flag标识
boolean flag = false;
if( n < 0){
// 如果flag为true,标识刚输入的n为负
flag = true;
n = -n;
}
// 核心逻辑
double result = pow(x,n);
// 使用三目运算符
return flag?1/result:result;
}
/**
*核心逻辑
*/
public double pow(double x,int n){
if(n == 0){
return 1;
}
if(n == 1){
return x;
}
double res = pow(x,n/2);
res = res*res;
// 因为n的值是奇是偶是不一样的
// 注意这个地方是res*x
return n%2==0?res:res*x;
}
}
3. 结果分析
- 执行用时:1 ms, 在所有 Java 提交中击败了96.27%的用户
- 内存消耗:36.6 MB, 在所有 Java 提交中击败了60.03%的用户