Medium!

题目描述:

实现 pow(xn) ,即计算 x 的 n 次幂函数。

示例 1:

输入: 2.00000, 10
输出: 1024.00000

示例 2:

输入: 2.10000, 3
输出: 9.26100

示例 3:

输入: 2.00000, -2
输出: 0.25000

说明:

  • -100.0 < x < 100.0
  • n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。

解题思路:

这道题让我们求x的n次方,如果我们只是简单的用个for循环让x乘以自己n次的话,未免也把LeetCode上的题想的太简单了,一句话形容图样图森破(Too young too simpleO(∩_∩)O哈哈~)啊。OJ因超时无法通过,所以我们需要优化我们的算法,使其在更有效的算出结果来。

我们可以用递归来折半计算,每次把n缩小一半,这样n最终会缩小到0,任何数的0次方都为1,这时候我们再往回乘,如果此时n是偶数,直接把上次递归得到的值算个平方返回即可,如果是奇数,则还需要乘上个x的值。还有一点需要引起我们的注意的是n有可能为负数,对于n是负数的情况,我们可以先用其绝对值计算出一个结果再取其倒数即可

C++解法一:

 class Solution {
public:
double myPow(double x, int n) {
if (n < ) return / power(x, -n);
return power(x, n);
}
double power(double x, int n) {
if (n == ) return ;
double half = power(x, n / );
if (n % == ) return half * half;
return x * half * half;
}
};

还有一种写法可以只用一个函数即可,在每次递归中处理n的正负,然后做相应的变换。

C++解法二:

 class Solution {
public:
double myPow(double x, int n) {
if (n == ) return ;
double half = myPow(x, n / );
if (n % == ) return half * half;
else if (n > ) return half * half * x;
else return half * half / x;
}
};

这道题还有迭代的解法,我们让i初始化为n,然后看i是否是2的倍数,是的话x乘以自己,否则res乘以x,i每次循环缩小一半,直到为0停止循环。最后看n的正负,如果为负,返回其倒数。

C++解法三:

 class Solution {
public:
double myPow(double x, int n) {
double res = 1.0;
for (int i = n; i != ; i /= ) {
if (i % != ) res *= x;
x *= x;
}
return n < ? / res : res;
}
};

最新文章

  1. 转换一个矩阵(2维数组)为HTML Table
  2. ios-UserDefaults
  3. jQuery Pagination分页插件的使用
  4. Linux网络编程-readn函数、writen函数、readline函数实现
  5. break语句
  6. [POJ1936]All in All
  7. C语言初学者代码中的常见错误与瑕疵(15)
  8. lintcode :旋转字符串
  9. MongoDB每64位版本下载
  10. struts2 中 Session的使用简介
  11. selenium 怎么处理display:none
  12. NIO 入门
  13. Vue 前端面试题
  14. Python3学习之路~7.1 静态方法、类方法、属性方法
  15. 学习Django,http协议,
  16. python日常
  17. (转)C++ 容器及选用总结
  18. Linux 无法连接网络排查方法
  19. servlet拦截器
  20. sql nolock是什么

热门文章

  1. shell中脚本变量和函数变量的作用域
  2. 超详细从零记录Hadoop2.7.3完全分布式集群部署过程
  3. maven自动打包上传nexus仓库配置
  4. MySQL_DDL(不定时更新)
  5. if语句和case语句用法展示
  6. Hive记录-hive权限控制
  7. Math.random()和UUID.randomUUID().toString()性能对比【纯原】
  8. mvn依赖冲突
  9. JMS学习(七)-ActiveMQ消息的持久存储方式之KahaDB存储
  10. 散列之HashTable学习