实现函数 pow(x,n),返回 xnx^nxn。

备注:
1、-100.0 < x < 100.0
2、n是一个32位的整数,范围为[−231,231−1][−2^{31}, 2^{31} − 1][−231,231−1]

示例:

Example 1:
Input: 2.00000, 10
Output: 1024.00000Example 2:
Input: 2.10000, 3
Output: 9.26100Example 3:
Input: 2.00000, -2
Output: 0.25000

思路

1、暴力法

根据乘方的定义, xnx^nxn 表示 n 个 x 相乘,那么循环 n 次的乘法即可。

算法复杂度为 O(n)。

2、分治法

根据公式:xn=(xn/2)2x^n = (x^{n/2})^2xn=(xn/2)2,可以将问题转化为求 xn/2x^{n/2}xn/2 的子问题,使用分治法可以解决,分治法的结束条件为 21=22^1=221=2

注意:

  • n/2n/2n/2 可能是小数,因此要提前判断 n 的奇偶性。
  • n 可能是负数,因此要提前将 n 转为整数,并使用公式xn=1/x−nx^n = 1/x^{-n}xn=1/x−n

算法复杂度为 O(logn)。

python实现

def myPow(x, n):""":type x: float:type n: int:rtype: float分治法。"""def fun(x, n):'''递归,x^n = (x^(n/2))^2'''# 递归结束条件if n == 1:return x# 递归half = fun(x, n // 2)if n % 2 == 1: # 如果是奇数,则还需要再乘以一个xreturn half * half * xelse:return half * halfif n == 0:return 1elif n > 0:return fun(x, n)else:return 1/fun(x, -n)if '__main__' == __name__:x, n = 2.10000, 3print(myPow(x, n))

Leetcode算法——50、实现乘方运算相关推荐

  1. LeetCode 50 实现乘方运算

    力扣 思路: 一.调用库函数pow(x,n) return pow(x,n); 二.x*x*x......循环n次(超时) 三.快速幂算法 当n为负数时,计算x^-n后取倒数,  得到结果,   只考 ...

  2. LeetCode算法题整理(200题左右)

    目录 前言 一.树(17) 1.1.后序遍历 1.2.层次遍历 1.3.中序 1.4.前序 二.回溯(20) 2.1.普通回溯 2.2.线性回溯:组合.排列.子集.分割 2.3.矩阵回溯 三.二分查找 ...

  3. Leetcode算法Java全解答--41. 缺失的第一个正数

    Leetcode算法Java全解答–41. 缺失的第一个正数 文章目录 Leetcode算法Java全解答--41. 缺失的第一个正数 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 ...

  4. 算法学习 |从无到有 刷爆LeetCode算法神器

    开始文章输出之前,我没有着急下笔,而是认真的问了自己几个问题. 我为什么要学算法? 如何保持学习的热情和积极性? 学到的算法是否可以应用到工作中? 学到的算法怎么应用到工作中? 如何实现从掌握到精通? ...

  5. LeetCode算法题-Convert a Number to Hexadecimal(Java实现)

    这是悦乐书的第219次更新,第231篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第86题(顺位题号是405).给定一个整数,写一个算法将其转换为十六进制.对于负整数,使 ...

  6. LeetCode算法题8:递归和回溯1

    文章目录 前言 回溯算法: 一.合并两个有序链表(简单,可略过) 迭代遍历 一开始没有想到的递归解法 二.反转链表 迭代遍历(头插法): 递归: 三.组合 回溯: 四.全排列 回溯(交换): 回溯: ...

  7. LeetCode算法题5:双指针

    文章目录 前言 一.有序数组的平方 二.轮转数组 三.移动零 四.两数之和 II - 输入有序数组 五.反转字符串 六.反转字符串中的单词 III 七.链表的中间结点 八.删除链表的倒数第 N 个结点 ...

  8. LeetCode算法题-Jewels and Stones(Java实现)

    这是悦乐书的第313次更新,第334篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第182题(顺位题号是771).字符串J代表珠宝,S代表你拥有的石头.S中的每个字符都是 ...

  9. LeetCode算法总结-回溯法与深度优先搜索

    转载自  LeetCode算法总结-回溯法与深度优先搜索 回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标.但当探索到某一步时,发现原先选择并不优或达不到目标,就退 ...

最新文章

  1. 配置化的版本更新引导怎么做?
  2. Spring.Resource与Spring资源获取方式
  3. 洛谷——P1546 最短网络 Agri-Net
  4. 小程序学习(一):点击爱心变色 -- 最简单的事件实现
  5. BZOJ3638|CodeForces 280D k-Maximum Subsequence Sum
  6. 【深度学习】图像匹配Siamese网络实验记录
  7. 将DataRow转换为DataTable
  8. Mariadb----字符类型 (五)
  9. Data Structures(Chapter 3 of The Algorithm Design Manual)
  10. 9.template -- basic concepts
  11. 【JAVA】Collections.sort()实现动态数组自定义排序
  12. 稳压二极管的工作原理及稳压二极管使用电路图
  13. 【疯狂游戏】游戏策划面经
  14. 数据结构—哈夫曼编码
  15. AT070TN83 V1.0 背光不亮
  16. 个人网站音乐服务器,自己的私人音乐流媒体服务,这才是多少音乐者的梦寐以求的...
  17. Effective java读后感
  18. 圣诞礼物|2020年送这些礼物你就能拥有一个程序员男朋友
  19. react+express +materialui模板
  20. python中函数返回值为func 和func() 的区别

热门文章

  1. 计算机网络英语作文150字,微信投票的英语,写一篇关于网络投票看法的英语作文150字左右...
  2. linux_ohs安装_weblogic进行管理
  3. 联想笔记本大小写、数字键、触摸板切换图标不显示的解决方案
  4. 短信发送显示服务器失败,手机短信发不出去怎么办 手机故障解决方法【方法步骤】...
  5. 移动NB的APN知识汇总(及时补充)
  6. Mac删除已卸载软件残留启动台的图标
  7. 在c语言中把x和y互换怎么编译,已知int x=10,y=12;编程将x和y的值相互交换
  8. 通过主成分分析实现三维模型对齐【Principal Component Analysis】
  9. 嵌入式 linux 之 Lzma 移植
  10. vue给html加背景图,Vue背景图如何全屏显示