【LeetCode】50. Pow(x, n) (3 solutions)
Pow(x, n)
Implement pow(x, n).
按照定义做的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 < )
{
if(n == INT_MIN) //-INT_MIN will cause overflow
return pow(x, n+)/x;
else
{
x = /x;
n = -n;
}
}
return Helper(x, n);
}
double Helper(double x, int n)
{//n > 0
if(n == )
return ;
double partRes = Helper(x, n>>);
if(n% == )
return partRes*partRes*x;
else
return 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 == )
return ; int sign = ;
if(n == INT_MIN)
return pow(x, n+) / x;
else if(n < )
{
sign *= -;
n *= -;
} double ret = ;
double mul = x;
while(n)
{
if(n & )
ret *= mul;
n >>= ;
mul *= mul;
} if(sign == )
return ret;
else
return / ret;
}
};
解法三:just a joke
class Solution {
public:
double pow(double x, int n) {
return std::pow(x,n);
}
};
【LeetCode】50. Pow(x, n) (3 solutions)的更多相关文章
- 【LeetCode】50. Pow(x, n) 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述: 题目大意 解题方法 递归 迭代 日期 题目地址: https://le ...
- 【Leetcode】50. Pow(x, n)
Implement pow(x, n). Example 1: Input: 2.00000, 10 Output: 1024.00000 Example 2: Input: 2.10000, 3 O ...
- 【一天一道LeetCode】#50. Pow(x, n)
一天一道LeetCode系列 (一)题目 Implement pow(x, n). (二)解题 题目很简单,实现x的n次方. /* 需要注意一下几点: 1.n==0时,返回值为1 2.x==1时,返回 ...
- 【LEETCODE】50、数组分类,简单级别,题目:888,1013,896,485,448,697
package y2019.Algorithm.array; import java.util.HashSet; import java.util.Set; /** * @ProjectName: c ...
- 【LeetCode】12. Integer to Roman (2 solutions)
Integer to Roman Given an integer, convert it to a roman numeral. Input is guaranteed to be within t ...
- 【LeetCode】234. Palindrome Linked List (2 solutions)
Palindrome Linked List Given a singly linked list, determine if it is a palindrome. Follow up:Could ...
- 【LeetCode】206. Reverse Linked List (2 solutions)
Reverse Linked List Reverse a singly linked list. click to show more hints. Hint: A linked list can ...
- 【LeetCode】200. Number of Islands (2 solutions)
Number of Islands Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. ...
- 【LeetCode】40. Combination Sum II (2 solutions)
Combination Sum II Given a collection of candidate numbers (C) and a target number (T), find all uni ...
随机推荐
- Eclipse中运行Tomcat遇到的内存溢出错误
使用Eclipse(版本Indigo 3.7)调试Java项目的时候,遇到了下面的错误: Exception in thread "main" Java.lang.OutOfMem ...
- 第十一章 springboot + mongodb(简单查询)
1.mongodb在mac上的安装 下载mongodb,https://www.mongodb.org/ 解压缩到一个指定文件夹,如:/Users/enniu1/Desktop/zjg/mongodb ...
- C++ Explicit Constructors(显式构造函数)
C++ 为类(Class)提供了许多默认函数.如果自己没有申明,编译器会为我们提供一个copy构造函数.一个copy assignment操作符和一个析构函数.此外,如果没有申明任何构造函数,编译器会 ...
- linux程序调试命令addr2line之入门简单介绍(本文先不聊gdb调试)
addr2line有什么作用呢? 可别小瞧它, 它能够定位到代码出错的位置. 以下, 我们来看看这个简单的代码: #include <stdio.h> int main() { int * ...
- Android -- 跳转应用市场评分
Code Uri uri = Uri.parse("market://details?id="+getPackageName()); Intent intent = new Int ...
- 使用Zxing开发Air版二维码扫描工具
简介实现的核心要点和几个须要注意的问题: 使用开源类库:Zxing,微信也是用的这个.下载地址:http://code.google.com/p/zxing/ as版:https://github.c ...
- 5. How to set up a Activity
1. Create a new xml in "layout" folder "splah.xml" <?xml version="1.0&qu ...
- 推荐20个很有帮助的web前端开发教程
1. CSS Vocabulary 一个伟大的指向和点击的小应用程序,让你加快速度掌握 CSS 语法的各个不同部分,学习各个属性的正确的名称. 2. Liquidapsive 一个简单的信息化布局,通 ...
- jquery.dataTables动态列
jquery.dataTables 版本1.10.7 直接上代码: 0.table <table id="popReportTable"> <thead> ...
- Maven的settings.xml文件结构之mirrors
Maven的远程库提供大量构件,供Maven项目直接下载使用.对于一个Maven项目,如果没有特别声明,默认使用Maven的central库,url如下: http://repo.maven.apac ...