LeetCode 第 50 题 (Pow(x, n))
来源:互联网 发布:c语言四大圣经先后顺序 编辑:程序博客网 时间:2024/06/06 18:22
LeetCode 第 50 题 (Pow(x, n))
Implement pow(x, n).
这个题目非常简短,求
最简单的想法就是用一个循环,将
class Solution {public: double myPow(double x, int n) { int sign = 1; if(n < 0) { n = -n; sign = -1; } double ret = 1; for(int i = 0; i < n; i++) { ret = ret * x; } if(sign == -1) { ret = 1 / ret; } return ret; }};
这个代码虽然从原理上是正确的,但是当
所以我们要想点其他的办法。
我们知道
而
double myPow(double x, int n) { double table[32]; int sign; table[0] = x; for(int i = 1; i < 32; i++) { table[i] = table[i - 1] * table[i - 1]; } if(n < 0) { n = -n; sign = -1; } double ret = 1; int i = 0; while(n) { if(n & 1) ret = ret * table[i]; n = (unsigned int)n >> 1; i ++; } if(sign == -1) { ret = 1 / ret; } return ret;}
这个代码还有一处需要特别解释解释。
n = (unsigned int)n >> 1;
为什么这里要加上 “(unsigned int)”? 只是为了应对一个特殊条件,就是
对于负数,
所以当
while(n){ n = n >> 1;}
所以这里要将 n 转换为 unsigned int 类型。
上面的代码还可以再优化一点。我们可以原地计算上面代码中用到的那个 Table。下面是代码。
double myPow(double x, int n) { int sign; if(n < 0) { n = -n; sign = -1; } double ret = 1; while(n) { if(n & 1) ret = ret * x; x = x * x; n = (unsigned int)n >> 1; } if(sign == -1) { ret = 1 / ret; } return ret;}
1 0
- LeetCode 第 50 题 (Pow(x, n))
- LeetCode 第50题 Pow(x, n) [log(n)]
- 【Leetcode】算法题50 Pow(x,n)
- leetcode 50 : Pow(x, n)
- LeetCode 50: Pow(x, n)
- [leetcode 50] Pow(x, n)
- [Leetcode] 50 - Pow(x, n)
- [LeetCode 50]Pow(x, n)
- leetcode 50 Pow(x, n)
- leetcode || 50、Pow(x, n)
- [leetcode] #50 Pow(x,n)
- LeetCode-50 Pow(x, n)
- Pow(x, n) - LeetCode 50
- Leetcode(50):Pow(x, n)
- LeetCode---(50)Pow(x, n)
- Leetcode #50 Pow(x, n)
- LeetCode(50) Pow(x, n)
- leetcode 50: Pow(x, n)
- C语言中,为什么字符串可以赋值给字符指针变量
- angular2 will be kiiled by react in the future?
- c单链表基本操作,本人已祥测
- eclipse 配置scala问题-More than one scala library found in the build path
- 第一篇文档,slf4j适配器
- LeetCode 第 50 题 (Pow(x, n))
- Android百度地图开发(二):显示地图界面
- MySql的隔离级别和锁的关系
- 界面之下:还原真实的MV*模式
- 2016sdau课程练习专题二 1012
- hdoj 5246 超级赛亚ACMer <贪心>
- html学习笔记(一)
- Android系统自带样式 @android:style
- 最小生成树算法-Prim算法