letcode-两数相除
题解
设未知数: Br= 125 / 3,拆进行如下拆解:
- Br = 125 / 3
- Br = (29 + 96)/3
- Br = 29/3 + (32 * 3) / 3
- Br = 29/3 + (2 * 2 * 2 * 2 * 2 * 3) / 3
- Br = (5 + 24) / 3 + (2 * 2 * 2 * 2 * 2 * 3) / 3
- Br = 5/3 + (8 * 3) /3 + (2 * 2 * 2 * 2 * 2 * 3) / 3
- Br = (2 + 3)/3 + (2 * 2 * 2 * 3)/3 + (2 * 2 * 2 * 2 * 2 * 3) / 3
- Br = 2/3 + (1 * 3)/3 + (2 * 2 * 2 * 3)/3 + (2 * 2 * 2 * 2 * 2 * 3) / 3
- Br = 0 + 1 + 8 + 32
- Br = 41
看到这个表达式的推演,那么我们可以使用递归进行求解了
为了方便计算,把除数与被除数取为负数
为了判断溢出,把最小负数(int)绝对值的一半定义为静态变量:halfMax = -1073741824; 当某个数大于它时二倍必定溢出
代码
class Solution {
/** 最小负数绝对值的一半 */
private static final int halfMax = -1073741824;
public int divide(int dividend, int divisor) {
if (divisor == 1) return dividend;
if (divisor == -1) return dividend == Integer.MIN_VALUE ? Integer.MAX_VALUE : -dividend;
/** 两数异号:位与大于0,位或小于0 */
boolean diff = (dividend < 0 && divisor >0) || (dividend > 0 && divisor < 0);
/** 取为负 */
dividend = dividend > 0 ? -dividend : dividend;
divisor = divisor > 0 ? -divisor : divisor;
if (dividend > divisor) return 0;
int result = deepDivide(dividend, divisor, divisor, 1);
return diff ? -result : result;
}
private int deepDivide(int dividend, int divisor, int curr, int result){
if (dividend > divisor) return 0;
int dCurr = curr + curr;
if (dCurr < dividend || curr < halfMax) {
int btn = dividend - curr;
if (btn > divisor){
return result;
}
/** 被除数与当前值差值递归 */
return result + deepDivide(btn, divisor, divisor, 1);
} else {
result += result;
if (dCurr == dividend){
return result;
} else {
/** 被除数与当前值二倍差值递归 */
return deepDivide(dividend, divisor, dCurr, result);
}
}
}
}
letcode-两数相除的更多相关文章
- [LeetCode] Divide Two Integers 两数相除
Divide two integers without using multiplication, division and mod operator. If it is overflow, retu ...
- [Swift]LeetCode29. 两数相除 | Divide Two Integers
Given two integers dividend and divisor, divide two integers without using multiplication, division ...
- python LeetCode 两数相除
近一个月一直在写业务,空闲时间刷刷leetcode,刷题过程中遇到了一道比较有意思的题目,和大家分享. 题目描述: 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使 ...
- Leetcode 29.两数相除 By Python
给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 1: 输 ...
- LeetCode(29): 两数相除
Medium! 题目描述: 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor ...
- LeetCode 29 - 两数相除 - [位运算]
题目链接:https://leetcode-cn.com/problems/divide-two-integers/description/ 给定两个整数,被除数 dividend 和除数 divis ...
- LeetCode29.两数相除 JavaScript
给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 1: 输 ...
- LeetCode OJ:Divide Two Integers(两数相除)
Divide two integers without using multiplication, division and mod operator. If it is overflow, retu ...
- 029 Divide Two Integers 两数相除
不使用乘号,除号和取模符号将两数相除.如果溢出返回 MAX_INT.详见:https://leetcode.com/problems/divide-two-integers/description/ ...
- leetcode 29 两数相除
问题描述 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 ...
随机推荐
- [转帖]Nginx 安全优化
目录 前言 1.使用 SSL/TLS 证书 2.使用安全密钥交换机制 3.禁用旧的 SSL/TLS 协议 4.禁用 SSL/TLS 弱密码套件 5.禁用不需要的 HTTP 方法 6.防止缓冲区溢出攻击 ...
- [转帖]Mysql 常用命令行,持续补充
https://www.cnblogs.com/wzj1223/p/13152446.html 1.常用命令行 # 登录Mysql mysql -uroot -proot # 查看所有数据库 show ...
- [转帖]基于 Skywalking 部署应用性能监控
https://www.jianshu.com/p/50627b9ab0be 今天我们就着重讲一讲如何基于 Skywalking 来快速搭建一套应用性能监控平台 walkingfunny.com. ...
- [转帖]gdb进阶调试技巧
https://www.jianshu.com/p/9bdaa0644dba 整理一下在linux下C/C++用gdb工具debug一些提高效率的操作.基本的gdb操作就不在这里赘述了. 打印各种变量 ...
- top的简单学习
获取当前进程的全部线程 jps 获取jvm的进程信息. top -Hp $pid -bn 1 > 1.txt 可以获取当前特定进程的所有子进程. 注意linux与Windows的不太一样. li ...
- [转贴]细说:Unicode, UTF-8, UTF-16, UTF-32, UCS-2, UCS-4
细说:Unicode, UTF-8, UTF-16, UTF-32, UCS-2, UCS-4 https://www.cnblogs.com/malecrab/p/5300503.html 1. U ...
- 玩一玩 golang 汇编(二)
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 上次玩 golang 汇编是使用了一个 python 的 ...
- 【分享一个工具】通过定义proto3来自动生成多进程模式的插件代码
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 我在多进程插件框架 hashicorp/go-plugin ...
- electron-builder
electron-builder打包工具 首先,确保你的项目中已经安装了 electron-builder.可以在项目根目录下运行以下命令来安装它: npm install electron-buil ...
- Leetcode 面试题22. 链表中倒数第k个节点 Java语言求解
题目链接 https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/ 题目内容 输入一个链表,输出该链 ...