桃红Jeep,不羁人生,驭风而行
题目链接pow(x,n)
题目解析题目很简单要求x的n次幂。
要注意n的取值范围n可能是负数这时候我们要利用数学中x⁻ⁿ 1 / xⁿ来转换n可能是 -2³¹若转换成正数则会超过 int 类型的最大取值 2³¹-1。
算法原理
1 解法一循环思路很简单循环n次即可。
for (int i 0; i n; i ) x * x;时间复杂度ON但是当n取值很大时比如 n 1000程序的效率就会降低甚至超时。
2 解法二快速幂快速幂可以采用两种方法来实现递归实现✅循环实现我们这里采用递归实现。
先看示例1要求 2¹⁰我们可以通过 2⁵ * 2⁵ 来得到要求 2⁵我们可以通过 2² * 2² * 2 来得到要求 2²我们可以通过 2 * 2 来得到要求 2我们可以通过 2⁰ (
* 2 来得到即
代码实现设计函数头——寻找子问题根据算法原理我们可以知道该问题的子问题是计算所给的x的n次幂因此函数头有两个参数x、n返回值为与所给的x相同的类型double pow(double x, int n)设计函数体——子问题所做的事每一个子问题都是先得到x的n / 2次幂然后根据当前n的奇偶性决定是 xⁿ * xⁿ还是 xⁿ * xⁿ * x即temp pow(x, n /
return (n % 2
? temp * temp temp * temp * temp递归出口当 n 0 时返回1因为所有数的0次幂都是1代码实现如下class Solution { public double myPow(double x, int n) { // 分n为正负两个情况 return (n
?
0 / pow(x, -n) : pow(x, n); } public double pow(double x, int n) { // 递归出口 if (n
return
0; double temp pow(x, n /
; // 分奇偶情况 return (n % 2
? temp * temp : temp * temp * x; } }
天美传奇免费观看高清-天美传奇免费观看高清应用