本文主要是介绍leetcode刷题记录31-50. Pow(x, n),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题描述
实现 pow(x, n) ,即计算
x
的整数n
次幂函数(即,x^n
)。
示例
示例 1:
输入:x = 2.00000, n = 10 输出:1024.00000示例 2:
输入:x = 2.10000, n = 3 输出:9.26100示例 3:
输入:x = 2.00000, n = -2 输出:0.25000 解释:2-2 = 1/22 = 1/4 = 0.25提示:
-100.0 < x < 100.0
-2^31 <= n <= 2^31-1
n
是一个整数- 要么
x
不为零,要么n > 0
。-10^4 <= x^n <= 10^4
问题分析:
这题需要使用到“快速幂算法”,例如我们要求x^8,那我们可以根据x,然后算出x^2,然后根据x^2来算出x^4,以此类推,而不需要每次都乘一个x。如果幂是奇数情况下需要多乘一个x。
代码如下:
class Solution {
public:double myPow(double x, int n) {long long N = static_cast<long long>(n);return N > 0 ? quickPow(x, N) : 1.0 / quickPow(x, -N);}// 第二个参数不是long long会超时,有个案例的n是-2147483648double quickPow(double x, long long n){double ans = 1.0;while(n > 0){// 最好手推一下,如果n是奇数,例如7,那每次都会执行下面的if语句// 也就是1.0 * x * x^2 * x^4;// 如果是偶数,例如8,则会在最后一个while循环中,一次性乘上所有的x// 也就是1.0 * x^8if(n % 2 == 1){ans *= x;}x *= x;n /= 2;}return ans;}
};
这篇关于leetcode刷题记录31-50. Pow(x, n)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!