[LeetOode][Java] Divide Two Integers

來源:互聯網
上載者:User

標籤:leetcode   java   divide two integers   

題目:

Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.

題意:

不使用乘法,除法和取餘操作,令兩個整數相除.

如果溢出,就返回 MAX_INT.

演算法分析:

參考部落格http://blog.csdn.net/linhuanmars/article/details/20024907


  * 我們知道任何一個整數可以表示成以2的冪為底的一組基的線性組合,即num=a_0*2^0+a_1*2^1+a_2*2^2+...+a_n*2^n。基於以上這個公式以及左移一位相

當於乘以2,

 * 我們先讓除數左移直到大於被除數之前得到一個最大的基。然後接下來我們每次嘗試減去這個基,如果可以則結果增加加2^k,然後基繼續右移迭代,直到

基為0為止。

 * 因為這個方法的迭代次數是按2的冪直到超過結果,所以時間複雜度為O(logn)。 


AC代碼:

<span style="font-size:12px;">public class Solution{    public int divide(int dividend, int divisor)     {        if(divisor == 0)        {            return Integer.MAX_VALUE;        }        boolean isNeg = (dividend^divisor)>>>31 == 1;//以上句子無符號右移一位!是以二進位代碼進行的! ^為異或運算        int res = 0;        if(dividend == Integer.MIN_VALUE)          {              dividend += Math.abs(divisor); //因為測試資料出現了-2147483648,還不能把它轉成正的(2147483648就溢出了),所以提前加上一個除數             if(divisor == -1)              {                  return Integer.MAX_VALUE;              }              res++;          }         if(divisor == Integer.MIN_VALUE)        {            return res;//這裡除數的絕對值已經為最大了,任何數除以這個數,結果的絕對值最終都會小於1 ,取整就是0嘍        }        dividend = Math.abs(dividend);        divisor = Math.abs(divisor);        int digit = 0;        while(divisor <= (dividend>>1))        {            divisor <<= 1;            digit++;        }        while(digit>=0)        {            if(dividend>=divisor)            {                res += 1<<digit;//(res=res+(1*2^digit))--->結果增加加2^k                dividend -= divisor;            }            divisor >>= 1;            digit--;        }        return isNeg?-res:res;    }}</span>


著作權聲明:本文為博主原創文章,轉載註明出處

[LeetOode][Java] Divide Two Integers

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.