Leetcode 50. Pow(x, n)
50. Pow(x, n)
Total Accepted: 96891 Total Submissions: 348858 Difficulty: Medium
Implement pow(x, n).
思路:分情况讨论:
1.n=0,返回1
2.n<0,转换为n>0的情况处理
3.n>0,举个例子:n=19时。
19=10011,所以x^19=x^10011=x^(10000+10+1)。所以只要看n的最末尾是否为1,如果为1,则累乘当前的x。每个循环,x=x*x,n=n>>1(n/2)。
注意:int的最小值INT_MIN=-2147483648,int的最大值INT_MAX=2147483647,可以看到INT_MIN!=INT_MAX;
代码:
迭代:
1 class Solution { 2 public: 3 double myPow(double x, int n) { 4 if(n<0){ 5 if(n==INT_MIN) return 1.0/(x*myPow(x,INT_MAX)); 6 return 1.0/myPow(x,-n); 7 } 8 if(n==0){ 9 return 1; 10 } 11 double product=1; 12 for(;n>0;x*=x,n=n>>1){ 13 if(n&1){ 14 product*=x; 15 } 16 } 17 return product; 18 } 19 };
递归:
1 class Solution { 2 public: 3 double myPow(double x, int n) { 4 if(n==0) return 1.0; 5 double product=myPow(x,n/2); 6 product*=product; 7 if(n<0){ 8 x=1/x; 9 } 10 return (n%2==0)?product:product*x; 11 } 12 };