1. 程式人生 > 其它 >Leetcode - 29. 兩數相除

Leetcode - 29. 兩數相除

給定兩個整數,被除數dividend和除數divisor。將兩數相除,要求不使用乘法、除法和mod運算子。
返回被除數dividend除以除數divisor得到的商。
整數除法的結果應當截去(truncate)其小數部分,例如: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

提示:

  • 被除數和除數均為 32 位有符號整數。
  • 除數不為0。
  • 假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−231, 231− 1]。本題中,如果除法結果溢位,則返回 231− 1。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/divide-two-integers
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解1 2021/8/30 O(?)

def divide(dividend: int, divisor: int) -> int:
    # 正常解就是,1)取出符號;2)用減法
    ret=int(dividend/divisor)
    return ret if ret in range(-(1<<31),(1<<31)) else (1<<31)-1

if __name__ == '__main__':
    print(divide(10,3))
    print(divide(7,-3))
    print(divide(-2147483648,-1))
    print(divide(-2147483648,1))
    print(divide(-2147483649,1))