給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。
阿新 • • 發佈:2018-12-17
記錄自己坑了又坑的每一天:
原題:
給定兩個整數,被除數 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。
以下為解答:
(1)、首先咱們要換一個操作來想,將除法考慮為減法,回到原始;
(2)、接下來就要分各種情況了,如果不分情況處理,有的示例會超時的:
1、被除數 = 除數 帶符號返回1;
2、被除數 < 除數 返回0;
3、除數 = 1 帶符號返回被除數;
4、除數 = 2 右移被除數(使用右移符號)(在沒考慮到這一步時,其中一個測試超時);
5、其他除數 定義一個迴圈,首先要讓被除數減去除數,並且要記錄下減法操作的次數,接下來在每次進行減法操作時,都要讓除數左移一位,相當於 除數*2,如果被除數已經小於除數,就要重新將除數賦值為原始值,在依次進行減法操作,迴圈結束的條件為 被除數 < 除數,在將結果進行返回時要判斷結果是否超出範圍。