牛客网刷题之数值的整数次方
2016-10-08 21:58
176 查看
题目描述:
解题思路:
其实,题目本身是没有难度的,只不过是要考虑周全,并在普通解法上进行优化就行了。分别考虑expont大于零以及小于零时,还有expont为零以及base为零的情况,加上条件语句就可以写好普通解法:public double Power(double base, int exponent) throws Exception { double result = 1; if(base == 0){ throw new Exception("底数不能为0"); } else if(exponent == 0){ return 1; } else if(exponent > 0){ for(int i =1 ; i <= exponent ; i ++){ result *= base; } return result; }else{ for(int i = 1 ; i <= (-exponent) ; i ++){ result *= base; } return 1/result; } }
这种强解法的复杂度是O(n)的,当然还有稍微好一点的解法:
当n为偶数时 base^n = base^(n/2) * base^(n/2)
当n为偶数时 base^n = base^(n/2) * base^(n/2) *base,这样的话就可以递归求出(n/2)时的大小,最后只只需要判断传入的expont的奇偶行再进行一步运算就可以了。这样的话,复杂度就是O(logn)了。
题解:
public double Power(double base, int exponent) throws Exception { double result = 1; if(base == 0){ throw new Exception("底数不能为0"); } else if(exponent == 0){ return 1; } int n = exponent > 0 ? exponent : (-exponent); result = Power(base, n >> 1); result *= result; if((n &0x1) == 1){ result *= base; } return exponent > 0 ? result : 1/result; }
ac结果:
相关文章推荐
- 《剑指offer》牛客网java题解-数值的整数次方
- 牛客网 剑指offer-数值的整数次方
- 牛客网-剑指offer-12-数值的整数次方
- 数值的整数次方(牛客网7)
- 牛客网-《剑指offer》-数值的整数次方[快速幂运算]
- 牛客网习题剑指offer之数值的整数次方
- 数值的整数次方
- 数值的整数次方
- 剑指offer 12 数值的整数次方
- 剑指offer第12题(数值的整数次方)
- 剑指offer-面试题11.数值的整数次方
- 数值的整数次方(剑指offer面试题11)
- 《剑指offer》-数值的整数次方
- 数值的整数次方
- 剑指offer--面试题11:数值的整数次方--Java实现
- 数值的整数次方
- 《剑指offer》刷题笔记(代码完整性):数值的整数次方
- 面试题------数值整数次方
- 数值的整数次方
- 数值的整数次方