這題也是以前看過沒理解,倒過來看理解的。
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說...