Pow(x, n)

Implement pow(xn).

按照定义做的O(n)肯定是TLE的。

利用这个信息:x2n = (xn)2

有个注意点,当n为负是,直接取反是不可行的。

由于int的表示范围是[2-31, 231-1],当n为INT_MIN时,取反会溢出。

因此需要对n==INT_MIN单独考虑。

另外,除以2可以用右移1位来实现。

解法一:递归

class Solution {
public:double pow(double x, int n) {if(n < 0){if(n == INT_MIN)    //-INT_MIN will cause overflowreturn pow(x, n+1)/x;else{x = 1/x;n = -n;}}return Helper(x, n);}double Helper(double x, int n){//n > 0if(n == 0)return 1;double partRes = Helper(x, n>>1);if(n%2 == 1)return partRes*partRes*x;elsereturn partRes*partRes;}
};

解法二:非递归

对于n的二进制表示,考虑每一位的0/1。

举例n==5,二进制表示为101

右数第一位为1,需要乘以x

右数第二位为0,不需要乘以x2

右数第三位为1,需要乘以x4

class Solution {
public:double pow(double x, int n) {if(n == 0)return 1;int sign = 1;  if(n == INT_MIN)return pow(x, n+1) / x;else if(n < 0){sign *= -1;n *= -1;}double ret = 1;double mul = x;while(n){if(n & 1)ret *= mul;n >>= 1;mul *= mul;}if(sign == 1)return ret;elsereturn 1 / ret;}
};

解法三:just a joke

class Solution {
public:double pow(double x, int n) {return std::pow(x,n);}
};

转载于:https://www.cnblogs.com/ganganloveu/p/4161167.html

【LeetCode】50. Pow(x, n) (3 solutions)相关推荐

  1. 【LeetCode】剑指 Offer 50. 第一个只出现一次的字符

    [LeetCode]剑指 Offer 50. 第一个只出现一次的字符 文章目录 [LeetCode]剑指 Offer 50. 第一个只出现一次的字符 一.哈希表 二.有序哈希表 本题考查哈希表的使用, ...

  2. 【LeetCode】﹝数学规律ி﹞第N位数字、可怜的小猪

    [LeetCode]﹝数学规律ி﹞第N位数字.可怜的小猪 文章目录 [LeetCode]﹝数学规律ி﹞第N位数字.可怜的小猪 乐团站位★ 罗马数字转整数★ 整数转罗马数字★★ 第 N 位数字★★ 数字 ...

  3. 【Leetcode】Palindrome Number

    Determine whether an integer is a palindrome. Do this without extra space. 思路:若使用[Leetcode]Reverse I ...

  4. 【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java

    [LeetCode]Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum dept ...

  5. 【LeetCode】剑指 Offer 14. 剪绳子

    [LeetCode]剑指 Offer 14. 剪绳子 文章目录 [LeetCode]剑指 Offer 14. 剪绳子 两道题目的区别在于第二题 n 的取值范围更大 package offer;publ ...

  6. 【LeetCode】剑指 Offer 17. 打印从1到最大的n位数

    [LeetCode]剑指 Offer 17. 打印从1到最大的n位数 文章目录 [LeetCode]剑指 Offer 17. 打印从1到最大的n位数 一.大数 一.大数 将 1~9 加入队列 对队列中 ...

  7. 【leetcode】963. Minimum Area Rectangle II

    题目如下: Given a set of points in the xy-plane, determine the minimum area of any rectangle formed from ...

  8. 【LeetCode】第643题——子数组最大平均数I(难度:简单)

    [LeetCode]第643题--子数组最大平均数I(难度:简单) 题目描述 解题思路 代码详解 注意点 题目描述 给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数. 示 ...

  9. 【LeetCode】《剑指Offer》第Ⅴ篇⊰⊰⊰ 39 - 47题

    [LeetCode]<剑指Offer>第Ⅴ篇⊰⊰⊰ 39 - 47题 文章目录 [LeetCode]<剑指Offer>第Ⅴ篇⊰⊰⊰ 39 - 47题 39. 数组中出现次数超过 ...

最新文章

  1. python 字符匹配_python 中如何匹配字符串
  2. python提取数据包中的文件_Python-对Pcap文件进行处理,获取指定TCP流
  3. UVALive - 3126 Taxi Cab Scheme(最小路径覆盖-二分图最大匹配)
  4. keil5函数 默认返回值_Python中如何调用random()函数
  5. Safari 版本回退方法
  6. 40个漂亮的单页网站设计案例(上篇)
  7. java 异常处理 Throwable Error 和Exception
  8. ARC077C pushpush 递推
  9. CTFHUB WEB
  10. 谈谈创业这点事 之 时间窗口
  11. r语言如何计算t分布临界值_如何利用R语言进行meta分析—详细教程(2)
  12. DSP 2812: 使用C++封装外设时钟控制
  13. 移动硬盘打不开(不用格式化)修复方法
  14. Android Fingerprint属性
  15. X264 AQ MODE详解
  16. PR导入视频失败、没有音频解决方法
  17. 电子地图(gis应用)开发数据来源分析
  18. 如何应用SPSS的频率分析,分析数值分布规律
  19. stm32驱动NRF24L01_原理+代码解析
  20. javaweb后台区分手机或是电脑登录

热门文章

  1. VMware 从菜鸟到高手系列之基础篇
  2. DCF模型里面的括号计算方法
  3. 减少生活中的不确定性
  4. 我建议您还是不要尝试和外国人讨论文学了,您干不过的。。。还是跟他们拼数学,逻辑,编程比较合适
  5. UNITY所谓的异步加载几乎全部是协程,不是线程;MAP3加载时解压非常慢
  6. hybrid app、web app与native app工具
  7. matlab遍历文件制作自己的数据集 .mat文件
  8. 浙江大数据交易中心正式上线
  9. android 之ViewStub
  10. java new java.text.SimpleDateFormat(yyyyMM01).format(date)