题目链接:https://leetcode.com/problems/divide-two-integers/description/
题意:
- 给定连个整数,分别为
dividenddivisor,不使用乘除和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
}
}