LeetCode 29. 两数相除 时间击败【100.00%】 内存击败【76.25%】
不禁让我想起了计算机是怎样进行除法运算的,单独考虑溢出以及边界情况,单独考虑符号,其他过程和我们小学除法是一模一样的:左移除数(十进制就是扩大十倍,二进制扩大两倍),直到正好比被除数小,一边累加商(在我的代码里就是33行)一边减小被除数,直到被除数不能减小,右移除数,重复上述过程。
1 public int divide(int dividend, int divisor) {
2 if (dividend == Integer.MIN_VALUE && divisor == -1) return Integer.MAX_VALUE;
3 if (dividend == Integer.MIN_VALUE && divisor == Integer.MIN_VALUE) return 1;
4 if (divisor == Integer.MIN_VALUE) return 0;
5
6 int ans = 0, neg = 0;
7 if (dividend == Integer.MIN_VALUE) {
8 if (divisor < 0) dividend -= divisor;
9 else dividend += divisor;
10 ans++;
11 if (dividend >= 0) neg ^= 1;
12 }
13 if (dividend < 0) {
14 neg ^= 1;
15 dividend *= -1;
16 }
17 if (divisor < 0) {
18 neg ^= 1;
19 divisor *= -1;
20 }
21 if (dividend < divisor) return neg == 1 ? -ans : ans;
22
23 int res = 1;
24 while (divisor <= dividend / 10) {
25 divisor *= 10;
26 res *= 10;
27 if (dividend == divisor && dividend == 0) return neg == 1 ? -ans : ans;
28 }
29
30 while (divisor != 0) {
31 while (dividend >= divisor) {
32 dividend -= divisor;
33 ans += res;
34 }
35 while (dividend < divisor) {
36 divisor /= 10;
37 res /= 10;
38 }
39 }
40 return neg == 1 ? -ans : ans;
41 }
LeetCode 29. 两数相除 时间击败【100.00%】 内存击败【76.25%】的更多相关文章
- Java实现 LeetCode 29 两数相除
29. 两数相除 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商 ...
- Leetcode 29.两数相除 By Python
给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 1: 输 ...
- LeetCode 29 - 两数相除 - [位运算]
题目链接:https://leetcode-cn.com/problems/divide-two-integers/description/ 给定两个整数,被除数 dividend 和除数 divis ...
- leetcode 29 两数相除
问题描述 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 ...
- [LeetCode]29 两数相除和一个小坑点
给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 1: 输 ...
- LeetCode 29——两数相除
1. 题目 2. 解答 2.1. 方法一 题目要求不能使用乘法.除法和除余运算,但我们可以将除法转移到对数域. \[ \frac{a}{b} = e^{\frac{lna}{lnb}} = e^{ln ...
- leetcode 29两数相除
我理解本题是考察基于加减实现除法,代码如下: class Solution { public: //只用加减号实现除法, //不用加减号实现除法: int divide(int dividend, i ...
- 【剑指 Offer II 001. 整数除法】同leedcode 29.两数相除
剑指 Offer II 001. 整数除法 解题思路 在计算的时候将负数转化为正数,对于32位整数而言,最小的正数是-2^31, 将其转化为正数是2^31,导致溢出.因此将正数转化为负数不会导致溢出. ...
- [LeetCode] 29. Divide Two Integers 两数相除
Given two integers dividend and divisor, divide two integers without using multiplication, division ...
- LeetCode(29): 两数相除
Medium! 题目描述: 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor ...
随机推荐
- Unity 使整个UnityUI变成彩色的BUG
最近接手了一个两年前的老项目,在这个项目里碰到一个BUG ,每次运行到这个场景的时候,整个Unity 的所有UI包括Unity界面都会变成彩色. 后来发现是因为物体丢失,代码修改Image里的图片颜色 ...
- kafka在阿里云上的配置
只需要改server.properties listeners=PLAINTEXT:// 内网的ip地址和9092端口advertised.listeners=PLAINTEXT://外网的ip的地 ...
- cuda、cudnn、tnesorrt的查看安装
1.首先本地查看cuda已安装的版本 11.7输入命令:[nvcc -V]输出:nvcc: NVIDIA (R) Cuda compiler driverCopyright (c) 2005-2022 ...
- 利用canvas合并两个海报
图片1 是个海报,图片2是个二维码,把这个二维码镶嵌到图片1 的指定位置上 function drawAndShareImage(opt, cb) { if (!opt) { console.erro ...
- AFNI 教程 步骤5:统计和建模
第一部分 时间序列 用AFNI打开fMRI数据, Graph按钮可以打开信号界面,中心的信号是该像素的信号随着时间的变化图,m 可以显示更少的体素,M可以显示更多的体素.V 可以浏览整个图像,+ 可以 ...
- 【jquery easyUI 拓展
jquery-easyui本身没有提供列锁定/解锁的接口,并且其原有的列隐藏/显示在符合表头的情况下会出现错位,我在项目中遇到了这两个问题,在参考了网上许多解决方案后,编写了一个拓展插件,基本上解决了 ...
- 软件工程日报八——AlertDiatog的使用
今天学习了AlertDiatog的相关内容 AlertDialog可以在当前的界面上显示一个对话框,这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他控件的交互能力,因此AlertDialog一般是 ...
- JS中立即执行函数和闭包的区别
函数声明规则:必须指定一个函数名字 foo(); function foo() { console.log("函数声明") } 由于函数声明会被提升,所以调用函数可以在之前或之后调 ...
- java常用开发学习网站列表
持续更新中 kettle国内镜像下载 版本 地址 7.1版本 http://mirror.bit.edu.cn/pentaho/Data%20Integration/ 8.2版本 http://mir ...
- js中的base64转化
创建一个base64.js文件,将以下代码粘贴进去 var Base64= { _keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrst ...