博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode pow(x,n)实现
阅读量:6091 次
发布时间:2019-06-20

本文共 849 字,大约阅读时间需要 2 分钟。

题目描述:

     自己实现pow(double x, int n)方法

 

实现思路:

    考虑位运算。考虑n的二进制表示形式,以n=51(110011)为例,x^51 = x^1*x^2*x^16*x^32,因此每次将n无符号右移一位,并将x取当前值的平方,如果n右移后末位

为1,则将res*x。考虑特殊情况,当n为Integer.MIN_VALUE时,此时-n=Integer.MAX_VALUE+1,我第一次就是没有考虑到这个边界情况出错的。。。

    该方法通过扫描n的二进制表示形式里不同位置上的1,来计算x的幂次

   

LeetCode的AC代码(Java版)如下:

       

public class Solution {    public double myPow(double x, int n) {       if(n < 0){           if(n == Integer.MIN_VALUE){  //考虑边界值               return 1/(myPow(x,Integer.MAX_VALUE)*x);             }else{               return 1/myPow(x,-n);           }       }              if(n == 0){           return 1.0;       }              double res = 1.0;       for(; n>0; x = x*x, n = n>>>1){  //无符号右移的同时,x取自身的平方                      if( (n & 1) > 0){               res *= x;           }       }              return res;    }}

 

转载于:https://www.cnblogs.com/bywallance/p/6030621.html

你可能感兴趣的文章
[ACM] hdu 1251 统计难题 (字典树)
查看>>
调试json
查看>>
C - Surprising Strings
查看>>
hibernate里的generator中class =value介绍
查看>>
activity-alias的使用
查看>>
第36周日
查看>>
SQL Server 无法打开物理文件的 2 种解决办法
查看>>
推荐一款好用的文件/文件夹对比工具 —— Beyond Compare
查看>>
java设计模式--结构型模式--桥接模式
查看>>
JS window.open()属性
查看>>
手机管理中的应用【6】——电源管理篇
查看>>
【Android工具】DES终结者加密时报——AES加密演算法
查看>>
效果收集-点击显示大图
查看>>
Android 开机过程PMS分析
查看>>
找不到com.apple.Boot.plist
查看>>
使用openssl创建自签名证书及部署到IIS教程
查看>>
入门视频采集与处理(学会分析YUV数据)
查看>>
java keytool详解
查看>>
记一次Redis被攻击的事件
查看>>
Debian 的 preinst, postinst, prerm, 和 postrm 脚本
查看>>