【Swift】LeedCode 两数相除
由于各大平台的算法题的解法很少有Swift的版本,小编这边将会出个专辑为手撕LeetCode算法题。
给定两个整数,被除数 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。
Swift解法如下:
class Solution {
func divide(_ dividend: Int, _ divisor: Int) -> Int {
var num1 = abs(dividend)
var num2 = abs(divisor)
var sum = 0
var bool:Bool = (num1 == dividend && num2 == divisor) || num1 != dividend && num2 != divisor // 判断最原始的时候是否同时为正数或者同时为负数 决定于最后的符号
//如果两个数的绝对值相同 也就是例如x/x这种情况 那么结果肯定为+1、-1
if num2 == num1 && bool{
return 1
}else if num1 == num2 && !bool{
return -1
}
//本题中,如果除法结果溢出,则返回 231 − 1。
if (Decimal(dividend) <= pow(-2,31) || Decimal(dividend) > pow(2,31)) && divisor == -1 {
return num1-1
}
repeat{
num1 = num1 - num2
sum = sum + 1
}while(num1 >= 0)
if bool{ //同时为正数或者同时为负数
return sum-1
}else{
return 0-(sum-1)
}
}
}