50. Pow(x, n) Python

文章目录

  • 一、题目描述
      • 示例 1
      • 示例 2
      • 示例 3
  • 二、代码
  • 三、解题思路


一、题目描述

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

示例 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
-231 <= n <= 231-1
n 是一个整数
-104 <= xn <= 104
`

二、代码

代码如下:

class Solution:
    def myPow(self, x: float, n: int) -> float:
        if n >= 0:
		        power_2 = 1
		        result = 1
		        p = x
		        while power_2 <= n:
		            #print("power_2 & n:",power_2 & n)
		            #power_2 & n的意思是 power_2和n都转换为2进制后进行&运算(1&1=11&0=00&0=0
		            if power_2 & n != 0:
		                #result=result*p
		                result *= p
		                #print("①",result)
		            #x^2 x^4 x^8 x^16
		            p = p * p
		            #print("②", p)
		            #power_2 = power_2*2 翻倍当前次数 ,相当于当前的p值平方之后的结果
		            power_2 = power_2 * 2
		            #print("③",power_2)
		        print("结果:",result)
		        return result
	    else:
	        n = -n
	        x = 1/x
	        power_2 = 1
	        result = 1
	        p = x
	        while power_2 <= n:
	            if power_2 & n != 0:
	                result *= p
	            p = p * p
	            power_2 = power_2 * 2
	            print(result)
	        print(result)
	        return result

三、解题思路

本题的解题思路是采用快速幂(二进制求幂)的方法去计算一个很大的幂。
二进制求幂的思想主要是将幂指数进行分割,例如:
213=2(1101) 其中1101为13的二进制表示。
2(1101)=21*8 x 21*4 x 20*2 x 21*1
如此计算的话,原本需要进行13次累乘运算的幂,现在只需要4次就能计算出来。

你可能感兴趣的:(LeetCode中等难度题集,python,开发语言)