摘要:題目要求在不使用乘法,除法和求余操作的情況下,計算兩個整數相除的結果。如果溢出了,則返回最大值。在這里核心思路是使用逆向二分法和遞歸的思路來進行計算。在這里我們使用取值范圍更廣的來處理數值溢出的場景。
題目要求
Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT.
在不使用乘法,除法和求余操作的情況下,計算兩個整數相除的結果。如果溢出了,則返回最大值。
在這里核心思路是使用逆向二分法和遞歸的思路來進行計算。其中一個難點在于如何處理溢出的情況。在這里我們使用取值范圍更廣的long來處理數值溢出的場景。其次我們將所有的正負值運算從遞歸中提取出來,直接判斷結果的正負情況并直接在返回最后結果時添上正負值
解題代碼public int divide(int dividend, int divisor) { //判斷最終結果的正負性 boolean isPositive = true; if((dividend<0&&divisor>0) || (dividend>0&&divisor<0)){ isPositive = false; } //判斷結束后全部當做正數進行操作 //使用long解決數值溢出情況 long ldividend = Math.abs((long)dividend); long ldivisor = Math.abs((long)divisor); if(ldivisor==0) return Integer.MAX_VALUE; if(ldividend==0 || ldividendInteger.MAX_VALUE){ return isPositive? Integer.MAX_VALUE : Integer.MIN_VALUE; } return (int)(isPositive? result : -result); } public long divide(long ldividend, long ldivisor){ if(ldividend = (sum+sum)){ sum += sum; result += result; } return result + divide(ldividend-sum, ldivisor); }
想要了解更多開發技術,面試教程以及互聯網公司內推,歡迎關注我的微信公眾號!將會不定期的發放福利哦~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69960.html
Problem Given two integers dividend and divisor, divide two integers without using multiplication, division and mod operator. Return the quotient after dividing dividend by divisor. The integer divisi...
摘要:題目解析用加減法實現除法用減法,每次累加被減部分,累加商,以一個固定的倍數遞增坑注意循環的跳出便捷,的情況要注意。應用累加思想,可以用在提速上,效率提高如果,則是負的,則是正的 題目解析: 用加減法實現除法 用減法,每次累加被減部分,累加商, 以一個固定的倍數遞增 坑: 注意 while循環的跳出便捷,= 的情況要注意。應用:累加思想,可以用在提速上,效率提高 Given two ...
摘要:很容易想到,我們每次用被除數減去除數,進行減法的次數就是最終結果。這道題的采取了一種類似二分查找的思想。除了這些,這道題還要注意一些邊界情況的判斷,例如除數或被除數為,值溢出等。 題目詳情 Divide two integers without using multiplication, division and mod operator.If it is overflow, retu...
摘要:上篇文章寫了以我自己的思路來解決這個問題,但是運行時間過長,看了上的高效寫法是使用位運算的解法,當初我自己寫這個問題是也想到了可以用位運算快一點,但是因為基礎差,對位運算的掌握不牢靠,還是選擇使用了減法的思路,在此將上高效解法做一個思路分析 上篇文章寫了以我自己的思路來解決這個問題,但是運行時間過長,看了leetcode 上的高效寫法是使用位運算的解法,當初我自己寫這個問題是也想到了可...
摘要:位操作法復雜度時間空間思路我們設想,本來應該的得到余,那么如果我們把忽略余數后分解一下,,也就是,也就是把商分解為,所以商的二進制是。我們可以不斷的將乘的一次方,二次方,等等,直到找到最大那個次方,在這里是的四次方。 Divide Two Integers Divide two integers without using multiplication, division and m...
閱讀 1887·2021-11-11 16:55
閱讀 2088·2021-10-08 10:13
閱讀 750·2019-08-30 11:01
閱讀 2159·2019-08-29 13:19
閱讀 3286·2019-08-28 18:18
閱讀 2625·2019-08-26 13:26
閱讀 584·2019-08-26 11:40
閱讀 1876·2019-08-23 17:17