题目链接:https://leetcode.com/problems/divide-two-integers/description/
题意:
- 给定连个整数,分别为
dividend
divisor
,不使用乘除和mod运算求商 - 两个整数都被标记为32位
- 如果溢出则返回2^32 - 1
思路:
上来很懵逼,后来看了道长的思路,swift的bitwise operator的<<
和>>
来实现整体的位移
divisor
翻倍,直到比
dividentd
大,得出位移次数
temp
,然后相减得出下一次循环的
dividend
。通过
1<<(temp-1)
得出十进制倍数
Solution
class Solution {
func divide(_ dividend: Int, _ divisor: Int) -> Int {
if divisor == 0 || (dividend == Int(Int32.min) && divisor == -1){
return Int(Int32.max)
}
let isNagtive = (dividend < 0) != (divisor < 0)
var dividend = abs(dividend)
var divisor = abs(divisor)
var temp = 0
var count = 0
while dividend >= divisor{
var divisortemp = divisor
temp = 0
while dividend >= (divisortemp << temp){
temp += 1
}
dividend -= divisor << (temp - 1)
count += 1 << (temp - 1)
}
return isNagtive ? -count : count
}
}
复制代码