本文主要是介绍let29 Divide Two Integers,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Divide two integers without using multiplication, division and mod operator.If it is overflow, return MAX_INT.
主题思想: 不用乘除取模做除法运算, 首先肯定用加减法, 但是由于直接加减速度太慢,然后联想到,对数优化,以2次幂的方式进行加减,这样速度优化log
最后是处理各种边界问题,比如什么时候会溢出,除数为0,
还要注意到,int 取值范围负数的绝对值比最大正数大1 ,
class Solution {public int divide(int dividend, int divisor) {int sign=1;if(divisor==0) return Integer.MAX_VALUE;if(dividend>0&&divisor<0||dividend<0&&divisor>0)sign=-1;long ldive=Math.abs((long) dividend);long ldivs=Math.abs((long)divisor);if(ldive<ldivs) return 0;long ans=longdivide(ldive,ldivs);if(ans>Integer.MAX_VALUE){ans=(sign==1)?Integer.MAX_VALUE:Integer.MIN_VALUE;}else{ans=(int)sign*ans;}return (int) ans;}public long longdivide(long dividend,long divisor){if(dividend<divisor) return 0;long sum=divisor;long multiple=1;while((sum+sum)<dividend){sum+=sum;multiple+=multiple;}return multiple+longdivide(dividend-sum,divisor);}
}
这篇关于let29 Divide Two Integers的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!