1. 程式人生 > >LeetCode兩數相除

LeetCode兩數相除

給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。

返回被除數 dividend 除以除數 divisor 得到的商。

示例 1:

輸入: dividend = 10, divisor = 3
輸出: 3

示例 2:

輸入: dividend = 7, divisor = -3
輸出: -2

說明:

  • 被除數和除數均為 32 位有符號整數。
  • 除數不為 0。
  • 假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231,  231 − 1]。本題中,如果除法結果溢位,則返回 231 − 1。
  • package divideTwoIntegers;
    
    public class DivideTwoIntegers {
    
    	public static void main(String[] args) {
    		DivideTwoIntegers divideTwoIntegers = new DivideTwoIntegers();
    		Solution solution = divideTwoIntegers.new Solution();
    
    		System.out.println(solution.divide(-1, 1));
    
    	}
    
    	class Solution {
    		public int divide(int dividend, int divisor) 
    		{
    		
    		  //判斷除數是否為0,為0則結果是極大值
              if(divisor==0)
              {
            	  return Integer.MAX_VALUE;
              }
              
         
              //判斷結果是否是負數
              boolean isNegative = false;
              if((dividend>0&&divisor<0)||(dividend<0&&divisor>0))
              {
            	  isNegative = true;
            	  
              }
              
              long dividendLong = Math.abs((long)dividend);
              long divisorLong =Math.abs((long)divisor);
              if(dividend==0||dividendLong<divisorLong)
              {
            	  return 0;
              }
              
             long result =dichotomyDividend(dividendLong,divisorLong);
              
              if(result>Integer.MAX_VALUE)
              {
            	  return isNegative?Integer.MIN_VALUE:Integer.MAX_VALUE;
              }
    		   return isNegative?(int)-result:(int)result;
    		}
    
    		private long dichotomyDividend(long dividendLong, long divisorLong) 
    		{
    			// TODO Auto-generated method stub
    			if(dividendLong<divisorLong)
    			{
    			    return 0;
    			}
    			//首次取1值
    			long result=1;
    			long tempDivisor = divisorLong;
    			
    			//進行二分減少計算
    			while(dividendLong>=(tempDivisor+tempDivisor))
    			{
    				tempDivisor+=tempDivisor;
    				result+=result;
    			}
    			
    			return result+dichotomyDividend(dividendLong-tempDivisor, divisorLong);
    		}
    	}
    
    }
    

相關推薦

[leetcode](Divide Two Integers)

兩數相除(Divide Two Integers) 給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。 返回被除數 dividend 除以除數 divisor 得到的商。 示例 1: 輸入: divid

LeetCode

給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。 返回被除數 dividend 除以除數 divisor 得到的商。 示例 1:

[leetcode] 29.

ide problems urn tmp detail while 這不 math divisor 29. 兩數相除 感覺是目前遇到過的最‘難’過的題。。。 不讓你用乘除法,看樣子又是個涉及位運算的題。 上來打算暴力,只用減法,結果超時。 沒啥想法,遂google了一下,發

LeetCode 29

解法 如果 += mod ide left 溢出 輸入 iso 給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算符。 返回被除數 dividend 除以除數 divisor 得到的商。 示例 1: 輸入: di

LeetCode 29——

urn https 處理 image 循環 繼續 移位操作 div labs 1. 題目 2. 解答 2.1. 方法一 題目要求不能使用乘法、除法和除余運算,但我們可以將除法轉移到對數域。 $$ \frac{a}{b} = e^{\frac{lna}{lnb}} = e^

LeetCode 29 - - [位運算]

題目連結:https://leetcode-cn.com/problems/divide-two-integers/description/ 給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。 返回被除數 dividend 除以除數 div

leetcode 29

問題描述     給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。   返回被除數 dividend 除以除數 divisor 得到的商。   示例 1:

LeetCode第29題 Divide Two Integers(

class Solution { public:     int divide(int dividend, int divisor) {         if(!divisor || (dividend == INT_MIN && divisor == -1)

Leetcode(29)

題目描述 給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。 返回被除數 dividend 除以除數 divisor 得到的商。 示例 1: 輸入: dividend = 10, divisor = 3 輸出: 3 示例 2:

leetcode 29 ---- 二分查詢(中等) : (java)

1.  問題:給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。返回被除數 dividend 除以除數 divisor 得到的商。 示例 1: 輸入: dividend = 10, divisor = 3

LeetCode-29.

題目地址:https://leetcode-cn.com/problems/divide-two-integers/ 思路:這題還是有點意思的,首先是隻能用int,然後不能用乘除mod。如果直接傻傻的用減法,那顯然超時。考慮用移位來操作,每次將除數逐漸翻倍至最接近被除數,然後將除數減去,

leetcode 29:

通過使用位運算可以解決該問題 需要注意的是當dividend=INT_MIN和divisor=-1時 得到的商將會溢位 任何一個整數都可以表示成以2的冪為底的一組基的線性組合 每次將除數左移到大於被除數的上一位,使用被除數減去移位之後的數, 持續這個直到基為0 i

LeetCode 29. Divide Two Integers(C語言)

題目描述: 給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。 返回被除數 dividend 除以除數 divisor 得到的商。 示例 1: 輸入: dividend = 10, divisor =

[LeetCode] Divide Two Integers

Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT. 這道題讓我們求兩數相除,而且規定我們不能用乘法,除法和取餘操作,那麼我們還

Leetcode做題日記:29. (PYTHON)

給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。 返回被除數 dividend 除以除數 divisor 得到的商。 示例 1: 輸入: dividend = 10, divisor = 3 輸出: 3 示例 2:

LeetCode演算法題29:解析

給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。 返回被除數 dividend 除以除數 divisor 得到的商。 示例 1: 輸入: dividend = 10, divisor = 3 輸出: 3 示例

LeetCode 29 — Divide Two Integers()

Given two integers dividend and divisor, divide two integers without using multiplication, division and mod operator. Return the qu

LeetCode 29.

題目描述 給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。 返回被除數 dividend 除以除數 divisor 得到的商。

LeetCode演算法題--------

問題: 給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。 返回被除數 dividend 除以除數 divisor 得到的商。 示例 1: 輸入: dividend = 10, divis

leetcode 29. (Divide Two Integers)

code cpp lis 示例 vid int else divide tle 目錄 題目描述: 示例 1: 示例 2: 解法: 題目描述: