/**
* 29. 两数相除
* @author wsq
* @date 2020/09/29
给定两个整数,被除数 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。
链接:https://leetcode-cn.com/problems/divide-two-integers
*/
package com.wsq.leetcode;
public class MyDivide {
/**
* 1. 记录两数最后的符号,同正、同负为正
* 2. 使用负数来运算,避免int溢出
* 3. 使用倍增的方式运算(一开始使用递减的方式,但是时间太慢了,超时,看其他人的思路修改5555555)
* @param dividend
* @param divisor
* @return
*/
public int divide(int dividend, int divisor) {
if(divisor == 0) {
return 0;
}
int sign = 0;
if((dividend > 0 && divisor > 0) || (dividend < 0 && divisor < 0)) {
sign = 1;
}
dividend = dividend > 0 ? -dividend : dividend;
divisor = divisor > 0 ? -divisor : divisor;
int ans = div(dividend, divisor);
if(sign == 1) {
return ans + Integer.MAX_VALUE < 0 ? Integer.MAX_VALUE : -ans;
}
return ans;
}
private int div(int dividend, int divisor) {
if(dividend > divisor) {
return 0;
}
int ta = dividend;
int tb = divisor;
int count = -1;
while(tb + tb >= ta && tb + tb < 0) {
tb += tb;
count += count;
}
// 返回值
return count + div(ta - tb, divisor);
}
public static void main(String[] args) {
int dividend = 10;
int divisor = 3;
MyDivide md = new MyDivide();
int ans = md.divide(dividend, divisor);
System.out.println(ans);
}
}
相关推荐
Veeam Backup 13 通过UI界面高效备份VMware ESXi虚拟机的完整指南
本文提供了一份使用Veeam Backup 13图形化界面高效备份VMware ESXi虚拟机的完整指南。内容涵盖从环境准备、添加vCenter/ESXi主机、配置备份存储库,到创建备份任务、设置保留策略与计划,以及执行备份和验证成功的关键步骤。通过直观的UI操作,管理员可以轻松实现虚拟机数据的可靠保护与快速恢复。
※29. 两数相除(java)
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2 示例 1: 输入: dividend = 10,...
杭电计算机组成原理课程设计-实验七-寄存器堆设计实验
寄存器堆实验实验原理实验内容模块功能说明模块逻辑引脚图寄存器堆模块代码REG模块测试用例REG-ALU测试用例实验结果记录 寄存器堆实验结果及分析ALU_REG运算器模块实验结果及分析探索与思考 实验原理 32×32位的寄存器堆模块示意图如图所示,含有32个寄存器,每个寄存器32位。该寄存器堆具有A和B两个读端口,分别由 5 位的寄存器编号 R_Addr_A 和 R_Addr_B 来寻址 2 个寄存器,读出的数据则由 R_Data_A(32 位)和R_Data_B(32 位)输出。读访问时,没有使能或者
29题:Java实现两数相除
题目要求不能用除法,不过我们处理溢出情况的写法,后面还是要用到的,尤其是 (long) dividend 这个强转的处理,其实就考察了基本数据类型的转换问题,包括最后返回的 (int) result,都是很细节的问题,但却很重要。很遗憾,前 5 个测试用例都是可以顺利通过的,但最后 1 个测试用例耗时会特别长,因为要计算 2147483648 / 1次,这个数太大了,所以我们要想办法优化一下。在数学中,加法是加减乘除的基础,减法是加法的逆运算,乘法是加法的倍增,除法是乘法的逆运算。
自然二进制数与格雷码的相互转换
自然二进制数与格雷码两者优势: 自然二进制数的编码方式简单明了,容易理解,在加减运算中能够直接进行,同时十分方便进行一些位运算操作(如移位、取反等)。 格雷码计数时只有一位变化,可有效减少计数器状态的冗余转换,同时在传输数据时能够减小传输错误的概率,此外带权重编码处理更加方便。 在一定程度上自然二进制数与格雷码优缺点基本相反,综上所述,自然二进制数和格雷码各有优劣之处,需要根据具体应用场景选择合适的编码方式。简单来说,在计数器和编码器中,倾向于使用格雷码;而在进行加减运算时,则倾向于使用自然二进制数。
k最近邻算法——电影分类及案例详解
如图3-7所示,若将国际象棋棋盘放在二维直角坐标系中,格子的边长定义为1,坐标的x轴及y轴和棋盘方格平行,原点恰落在某一格的中心点,则王从一个位置走到其他位置需要的步数恰为二个位置的切比雪夫距离,因此切比雪夫距离也称为棋盘距离。关于这里的距离度量,这个电影分类的例子有2个特征,也就是2维的,可以使用我们高中学过的两点距离公式(两点距离公式其实就是欧氏距离在二维空间上的公式,也就是欧氏距离n的值为2的情况,欧氏距离也称为欧几里德距离)来计算距离,如图3-3所示。对数据进行归一化,避免量纲对计算距离的影响。
两数相除(Java)
Given two integers dividend and divisor, divide two integers without using multiplication, division and mod operator. Return the quotient after dividing dividend by divisor. The integer division sho...
性能测试软件(LR12) 具体汉化(中文)方法
LoadRunner 12 的下载及安装详细过程请参考:https://blog.csdn.net/xiao66guo/article/details/105465854 1、在LoadRunner文件中找到 Setup.exe 可执行文件,并以管理员的身份运行: C盘 —> Temp—>HP LoadRunner 12.02 Community Edition—> D...
Java两整数相除向上取整
前言:Java中两个整数相除,如果不能整除,默认是向下取整的。例如:11 除以 3 的结果是 3。然而,某些情况下(eg. 把11个糖果,每3个分一堆,不足三个也分成一堆,可以分几堆?),我们需要向上取整,这样的情况该如果处理呢? 方式一: 添加三目运算符逻辑代码 x / y + (x % y != 0 ? 1 : 0); 这种方法逻辑上很简单,如果x可以整除y,就将x / y 的结果加0,不能整除y就将x / y 的结果加1。 方式二:使用ceil函数 (int)Math.ceil((double.
麒麟V10 SP1系统下编译linuxdeployqt并打包Qt 5.15.2程序完整指南
麒麟V10 SP1系统下编译linuxdeployqt并打包Qt 5.15.2程序完整指南
[leetcode]两数相除(Divide Two Integers)
两数相除(Divide Two Integers) 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 示例 1: 输入: dividend = 10, divisor = 3 输出: 3 示例 2: 输入: dividend = 7, diviso...
RU DOS版、EFI版32bit/64bit BIOS常用工具
DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。
LeetCode29-两数相除
LeetCode29-两数相除 Leetcode / 力扣 29. 两数相除: 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2 示例 1: 输入:
最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版
Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。
锂电池充电器电路设计 里面有电路
锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。
Leetcode 29 两数相除
Leetcode两数相除题目描述题解题解一(基于快速乘法思想)题解二(二分思想+快速乘法) 题目描述 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2 来源:力扣(LeetCode)题目链接 著作权归领扣网络所有。商业转载请
leetcode-第29题 两数相除
题目 给定两个整数,被除数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..) =...
【Leetcode 29】 两数相除
题目描述 方法一: 题干中说明不能用乘法和除法, 那么我们可以用减法, 被除数最多可以减多少个除数还能保证是非负的即可. class Solution: def divide(self, dividend, divisor): sig = True if dividend*divisor > 0 else False # 判断二者相除是正or负 d...
leetcode29.两数相除
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 示例 1: 输入: dividend = 10, divisor = 3 输出: 3 示例 2: 输入: dividend = 7, divisor = -3 输出: -2 说明: 被除数和除数均为 32 位有...
29. 两数相除
题目 给定两个整数,被除数 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(
29 两数相除(2021.07.27)
29. 两数相除 链接:https://leetcode-cn.com/problems/divide-two-integers/ 题目描述见链接内容。 解法1:暴力法 用暴力法解决,直接用被除数减去除数,每减一次,结果加1,要注意的是,这个题目里面,因为限定了除数和被除数的取值范围,所以结果越界的情况只需要在除数等于1或者-1时考虑就行 如果在每次计算时都判断越界的话,暴力法会超时 var divide = function (dividend, divisor) { const MIN = -M
leetcode 29. 两数相除
29. 两数相除 给定两个整数,被除数 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…) = tru
【Leet-Code】29. 两数相除
【题目解析】 对【除数】进行倍增的方式,与【被除数】比较。 举个例子:11 除以 3 。 首先11比3大,结果至少是1; 然后我让3翻倍,就是6,发现11比3翻倍后还要大,那么结果就至少是2; 那我让这个6再翻倍,得12,11不比12大,退出此轮【倍增】,此轮得到【商】的结果为2。 接下来让11减去刚才最后一次的结果6,剩下5,接下来我们计算5是3的多少倍。此时递归形式出现了,即重复1,2,3步骤。 class Solution: def divide...
Leetcode——倍增思想
Leetcode——倍增思想
leetcode:29. 两数相除(终于是自己写的了)
好久没自己写一道题了hhh 这道题之前写过,就是用倍增法一直逼近,然后就往了怎么做了 接下来的思路: 1.建立一个2的幂次倍数表 2.反向扫描获取可行的倍数进行减法 3.直到dividend小于divisor结束 src: import "fmt" func divide(dividend int, divisor int) int { //垃圾测试用例 if dividend==-2147483648 && divisor==-1 { return 2.
【力扣精选】用一拳超人的方式打开力扣,刷爆算法题 —— 龙卷篇
近期的LeetCode 好题分享,给大家带来不一样的解题思路。
力扣刷题记录
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录#22. 括号生成 #22. 括号生成 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入:n = 3 输出:["((()))","(()())","(())()","()(())","()()()"] 枚举->递归->回溯(backtrack) 可以在一个递归函数中写两个递归调用。先放左括号(, 当左括号放完之后再放右括号),所以会有两个if的递归调用,
LeetCode精选TOP面试题(中等篇)【出现率降序】
LeetCodeTOP面试题中前300道中等题目
438



被折叠的 条评论
为什么被折叠?



