029.两数相除-二哥的 LeetCode 刷题笔记-用减法和倍增来实现
鲁迅说过,人生最大的快乐就在不断的求知,不断地进步,在刷 LeetCode 的过程中强化自己的基础知识,二哥的 LeetCode 刷题笔记正给了我这样进步的快乐。
题意
给你两个整数,被除数 dividend
和除数 divisor
。将两数相除,要求不使用乘法、除法和取余运算。
整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断为 8 ,-2.7335 将被截断至 -2 。
返回被除数 dividend
除以除数 divisor
得到的商。
注意:假设我们的环境只能存储 32 位 有符号整数,其数值范围是 $[−2^{31}, 2^{31} − 1]$ 。本题中,如果商严格大于 $2^{31} − 1$ ,则返回 $2^{31} − 1$ ;如果商 严格小于 $-2^{31}$ ,则返回 $-2^{31}$ 。
难度
中等
示例
输入: dividend = 10, divisor = 3
输出: 3
解释: 10/3 = 3.33333.. ,向零截断后得到 3 。
输入: dividend = 7, divisor = -3
输出: -2
解释: 7/-3 = -2.33333.. ,向零截断后得到 -2 。
分析 1
题目要求不能用除法(/),也不能用乘法(*),还有 “取余(%)”,如果我们偏要用除法会怎么样呢?
class Solution {
public int divide(int dividend, int divisor) {
// 直接使用除法计算结果
long result = (long) dividend / divisor;
// 处理溢出情况
if (result > Integer.MAX_VALUE) {
return Integer.MAX_VALUE;
}
if (result < Integer.MIN_VALUE) {
return Integer.MIN_VALUE;
}
return (int) result;
}
}
来看一下运行结果:
真诚点赞 诚不我欺
回复