剑指offer:(11)代码的完整性: 数值的整数次方
2017-04-23 09:50
423 查看
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
传统公式求解时间复杂度O(n)
public class Solution {
public static double Power(double base, int exponent) {
boolean g_invalid = false;
if(equal(base, 0.0) && exponent < 0){
g_invalid = true;
return 0.0;
}
int absExponent = exponent;
if(exponent<0){
absExponent = -exponent;
}
double result = powerWithUnsignedExponent(base,absExponent);
if(exponent<0){
result = 1.0/result;
}
return result;
}
public static boolean equal(double num1,double num2){
if(num1-num2 > -0.0000001 && num1-num2<0.0000001){
return true;
}else{
return false;
}
}
//时间复杂度为exponent-1
// public static double powerWithUnsignedExponent(double base,int exponent){
// double result = 1.0;
// for(int i = 1;i<=exponent;i++){
// result *= base;
// }
// return result;
// }
public static double powerWithUnsignedExponent(double base,int exponent){
if(exponent==0){
return 1.0;
}
if(exponent==1){
return base;
}
double result = powerWithUnsignedExponent(base, exponent>>1);
result *= result;
if((exponent & 1) == 1){
result *= base;
}
return result;
}
}
传统公式求解时间复杂度O(n)
public class Solution {
public static double Power(double base, int exponent) {
boolean g_invalid = false;
if(equal(base, 0.0) && exponent < 0){
g_invalid = true;
return 0.0;
}
int absExponent = exponent;
if(exponent<0){
absExponent = -exponent;
}
double result = powerWithUnsignedExponent(base,absExponent);
if(exponent<0){
result = 1.0/result;
}
return result;
}
public static boolean equal(double num1,double num2){
if(num1-num2 > -0.0000001 && num1-num2<0.0000001){
return true;
}else{
return false;
}
}
//时间复杂度为exponent-1
// public static double powerWithUnsignedExponent(double base,int exponent){
// double result = 1.0;
// for(int i = 1;i<=exponent;i++){
// result *= base;
// }
// return result;
// }
public static double powerWithUnsignedExponent(double base,int exponent){
if(exponent==0){
return 1.0;
}
if(exponent==1){
return base;
}
double result = powerWithUnsignedExponent(base, exponent>>1);
result *= result;
if((exponent & 1) == 1){
result *= base;
}
return result;
}
}
相关文章推荐
- 剑指offer_面试题11 数值的整数次方_考察代码的完整性
- 【剑指offer】3.3代码的完整性——面试题11:数值的整数次方
- 剑指offer 3.3 代码的完整性1- 求数值的整数次方
- (C++)剑指offer-12:数值的整数次方(代码的完整性)
- 剑指offer--11.数值的整数次方
- 【剑指offer】题11:数值的整数次方
- 剑指Offer面试题11:数值的整数次方 Java实现
- 剑指Offer 11 数值的整数次方
- 剑指Offer--面试题11 数值的整数次方
- 剑指offer 11. 数值的整数次方
- 剑指offer——面试题11:数值的整数次方
- 剑指Offer之数值的整数次方(题11)
- 剑指offer之面试题11数值的整数次方
- 【剑指offer】面试题11:数值的整数次方
- 剑指offer-面试题11.数值的整数次方
- 剑指offer——面试题11:数值的整数次方
- 剑指Offer学习之面试题11 :数值的整数次方
- C++剑指offer_面试题11_数值的整数次方(*)
- 剑指offer----面试题11:数值的整数次方
- 剑指offer 面试题11 数值的整数次方