实现 pow(x, n) (Python and C++解法)

题目:

  计算 x 的 n 次幂函数。

示例 1: 输入: 2.00000, 10  输出: 1024.00000

示例 2: 输入: 2.10000, 3    输出: 9.26100

示例 3: 输入: 2.00000, -2  输出: 0.25000

解释: 2^-2 = 1/2^2 = 1/4 = 0.25说明: -100.0 < x < 100.0,n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/powx-n

思路:

  如果直接让x连续相乘,那么时间复杂度是O(n)。通过观察发现:

如果n是偶数:x^2 = x*x;  x^4 = x^2 * x^2;  x^6 = x^3 * x^3

如果n是奇数:x^3 = x^2 * x  x^5 = x^4 * x  x^7 = x^6 * x

Python解法:

 1 class Solution(object):
 2     def myPow(self, x: float, n: int):
 3         if n < 0:
 4             n = -n
 5             x = 1.0 / x
 6         pow = 1  # n为0时的结果
 7         while n:
 8             if n & 1:  # 判断n的奇偶性
 9                 pow = pow * x
10             x = x * x
11             n = n // 2
12         return pow
13 
14 
15 if __name__ == '__main__':
16     s = Solution()
17     print(s.myPow(2.0, 3))  # 8.0

C++解法:

 1 #include "pch.h"
 2 #include <iostream>
 3 using namespace std;
 4 
 5 class Solution {
 6 public:
 7     double myPow(double x, long n) {
 8         if (n < 0) {
 9             n = -n;
10             x = 1.0 / x;
11         }
12         double pow = 1;
13         while (n) {
14             if (n & 1)
15                 pow = pow * x;
16             x = x * x;
17             n = n / 2;
18         }
19         return pow;
20     }
21 };
22 
23 int main() {
24     Solution s;
25     cout << s.myPow(2.0, 3);  // 8
26 }
posted @ 2020-06-18 21:05  孔子?孟子?小柱子!  阅读(269)  评论(0编辑  收藏  举报