本文答案参考自leetcode众网友的题解(因为没有官方题解[尬笑]),我来为大家讲解一下关于leetcode两数之和怎么算?跟着小编一起来看一看吧!
leetcode两数之和怎么算
本文答案参考自leetcode众网友的题解。(因为没有官方题解[尬笑])
题目描述
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符
返回被除数 dividend 除以除数 divisor 得到的商。
整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
不能使用乘法、除法和 mod 运算符 ?[思考]
那还有什么运算呢?
对了,还有 加减 以及 比较底层的 位运算
此外,这里还有正负号的问题,相信大家应该可以应对[灵光一闪]。
【方法1】(加)减法以及(位运算)优化小学二年级([看])就学过:多次加就是乘,多次减就是除。
所以,我们可以用多次减法来模拟除法,像这样:
9 / 2 = 4 (整除)
就等于 9 - 2 - 2 - 2 - 2 = 1
- 开启循环,每次循环中将 被除数 减去 除数,并记录次数
- 当 被除数 小于 除数 时结束循环,所记录的次数就是答案。
这就是中等 (・∀・*)?怎么可能!
如果要计算 1000000 / 1 ,那岂不是要减很多很多次?
有人说,可以判断呀,判断除数是不是 1.
那 1000000 / 2 ,1000000 / 3 也要判断?
这不可能的吧 o((>ω< ))o
所以我们可以 放大除数 ,像这样:
9 / 2 = 9 / 4 * 2 = 4
- 同样开启循环,每次循环中
- 如果 被除数 大于 除数,则将除数乘以二(对2情有独钟啊[耶]),直到被除数 小于 除数,然后将 被除数 减去 除数,并记录 相当于原除数做减法 的次数
- 如果 被除数 小于 除数
- 如果除数是放大过的,则将除数除以二
- 如果除数是原来的,即可得到答案(即次数)
以上过程严格按照程序逻辑排版
其中,乘以二除以二的操作可以通过左右位移来实现
即 除数 << 1 表示乘以二,除数 >> 1 表示除以二
当然得注意除数的溢出问题。
以上描述可能有点细节上的模糊,但只需理解其思想就行了( 吧?(⊙﹏⊙))
[来看我][来看我][来看我]
,