給定兩個整數(shù),被除數(shù) dividend 和除數(shù) divisor丑孩。將兩數(shù)相除冀宴,要求不使用乘法、除法和 mod 運算符温学。
返回被除數(shù) dividend 除以除數(shù) divisor 得到的商略贮。
整數(shù)除法的結果應當截去(truncate)其小數(shù)部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
示例 1:
輸入: dividend = 10, divisor = 3
輸出: 3
解釋: 10/3 = truncate(3.33333..) = truncate(3) = 3
示例 2:
輸入: dividend = 7, divisor = -3
輸出: -2
解釋: 7/-3 = truncate(-2.33333..) = -2
提示:
被除數(shù)和除數(shù)均為 32 位有符號整數(shù)仗岖。
除數(shù)不為 0逃延。
假設我們的環(huán)境只能存儲 32 位有符號整數(shù),其數(shù)值范圍是 [?231, 231 ? 1]轧拄。本題中揽祥,如果除法結果溢出,則返回 231 ? 1檩电。
來源:力扣(LeetCode)
鏈接:https://leetcode.cn/problems/divide-two-integers
這個題不難拄丰,唯一要考慮的就是邊界值,我因為邊界值沒過俐末,看了一下解題的代碼料按,一看開頭,哎呀我去卓箫,沒考慮邊界值载矿。
我的思路很簡單,就是拿被除數(shù)一直減除數(shù)烹卒,直到被除數(shù)小于除數(shù)闷盔。
如果不理解弯洗,大家可以這樣想一下钙皮,除法是不是就是計算被除數(shù)里面有多少個除數(shù)肠鲫,也可以理解為被除數(shù)由多少個除數(shù)相加所得
先上代碼:
const MAX = 2147483647, MIN = -2147483648;
var divide = function(dividend, divisor){
if(dividend == MIN && divisor == -1)
return MAX;
var ds = Math.abs(divisor),de = Math.abs(dividend),isI = true,result = 0;
if(dividend < 0)isI = !isI;
if(divisor < 0)isI = !isI;
while(de>=ds){
result++;
de -= ds;
}
return isI ? result : -result;
}
然后就是我那拉跨的通過結果:
執(zhí)行用時:8696 ms, 在所有 JavaScript 提交中擊敗了5.08%的用戶
內存消耗:42.9 MB, 在所有 JavaScript 提交中擊敗了72.83%的用戶
通過測試用例:992 / 992
速度慢了一點,不過內存相對還是有點優(yōu)勢误澳。