leetcode 29兩數相除

2022-01-11 09:29:04 字數 1077 閱讀 8318

這題也是以前看過沒理解,倒過來看理解的。

public int divide(int dividend, int divisor) 

if(divisor==1)

return dividend;

dividend=dividend>0?0-dividend:dividend;

divisor=divisor>0?0-divisor:divisor;

int i=0;

if(dividend<=divisor)

i=1;

else

return 0;

while(dividend<=divisor+divisor&&divisor+divisor<0)

if(sign==1)

return i+divide(dividend-divisor, tmp);

else

return 0-(i+divide(dividend-divisor, tmp));

}

另一種容易理解的拆分**:

class solution 

return cnt+div(a-b,tmp);

}public int divide(int dividend, int divisor)

if(divisor==1)//特殊情況

return dividend;

dividend=dividend<0?dividend:0-dividend;//防止負最小轉正最大時出錯

divisor=divisor<0?divisor:0-divisor;//統一轉為負數

return sign==1?div(dividend,divisor):0-div(dividend,divisor);

}}

++ 正數最大值加1會變成負最小,負數最小減1會變成正最大。這是補碼計算得出的,也叫做溢位。

++ 這題如果有記錄翻倍的過程應該會更快,減少了遞迴次數,用空間換時間。

++ 左移一位也就是當前數翻倍(右邊補0),這題的話就是將除數進行移位,因為每個位置的數都翻倍,和也會翻倍,不過要考慮溢位問題

LeetCode29 兩數相除

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

LeetCode 29 兩數相除

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

leetcode 29 兩數相除

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