LeetCode:29. 两数相除

news/2023/12/4 21:49:28

29. 两数相除

  • 1)题目
  • 2)思路
  • 3)代码
    • 1.初始代码
    • 2.第一次优化
    • 3.第二次优化
  • 4)结果
    • 1.初始结果
    • 2.第一次优化结果
    • 3.第二次优化结果

1)题目

给你两个整数,被除数 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

示例 1:

输入: dividend = 10, divisor = 3
输出: 3
解释: 10/3 = 3.33333… ,向零截断后得到 3 。

示例 2:

输入: dividend = 7, divisor = -3
输出: -2
解释: 7/-3 = -2.33333… ,向零截断后得到 -2 。

提示:

  • -2^31 <= dividend, divisor <= 2^(31 − 1)
  • divisor != 0

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/divide-two-integers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2)思路

一开始是全部转成正数,后面发现比较麻烦,就采用全部转为负数这种方案。
代码优化思路:dividend = 100, divisor = 3
return i   1	2	4	8	16	32
divisor    3	6	12	24	48	96dividend = 96 + 3 = 991
输出:i = 32 + 1 = 33

3)代码

1.初始代码

直接循环相减

public static int divide(int dividend, int divisor) {// ------------ 前面的代码部分 ---------------if (dividend == 0) return 0;// 除数为1或-1if (divisor == 1) return dividend;if (divisor == -1) {if (dividend == Integer.MIN_VALUE) {return Integer.MAX_VALUE;}return -dividend;}// 除数等于被除数if (dividend == divisor) return 1;// 默认为正的boolean flag = true;// 全部转为负数if (dividend > 0) {dividend = -dividend;flag = !flag;}if (divisor > 0) {divisor = -divisor;flag = !flag;}// 被除数小于除数if (dividend > divisor) return 0;// ------------ 前面的代码部分 ---------------// ------------ 优化的代码部分 ---------------int i = 0;while (!(dividend > divisor)) {dividend -= divisor;++i;}// ------------ 优化的代码部分 ---------------return flag ? i : -i;
}

2.第一次优化

循环相减改良版

public static int divide2(int dividend, int divisor) {// 前面的代码同上// ------------ 优化的代码部分 ---------------int i = 1;int value = divisor;while (dividend - divisor <= value) {if (dividend - divisor <= divisor) {divisor += divisor;i += i;} else {divisor += value;++i;}}// ------------ 优化的代码部分 ---------------return flag ? i : -i;
}

3.第二次优化

采用递归方法

public static int divide(int dividend, int divisor) {// 前面的代码同上// ------------ 优化的代码部分 ---------------int i = divideValue(dividend, divisor, 0);// ------------ 优化的代码部分 ---------------return flag ? i : -i;
}private static int divideValue(int dividend, int divisor, int i) {if (dividend > divisor) return 0;int value = divisor;int num = 1;while (dividend - value <= value) {value += value;num += num;}i = num + divideValue(dividend - value, divisor, i);return i;
}

4)结果

1.初始结果

在这里插入图片描述

2.第一次优化结果

在这里插入图片描述

3.第二次优化结果

在这里插入图片描述


http://www.ppmy.cn/news/75997.html

相关文章

基于Freertos的ESP-IDF开发——7.WS2812B彩色灯循环

基于Freertos的ESP-IDF开发——7.WS2812B彩色灯循环 0. 前言1. WS2812B简介2. 完整代码3. 演示效果4. 其他FreeRtos文章 0. 前言 本节使用WS2812B实现彩灯循环 开发环境&#xff1a;ESP-IDF 4.3 操作系统&#xff1a;Windows10 专业版 开发板&#xff1a;自制的ESP32-WROOM-3…

Python关于Pandas的iterrows、itertuples等遍历表格时读取不到第一行的问题

一、问题原因 df.iterrows() 是用来遍历 Pandas DataFrame 的方法&#xff0c;它会把 DataFrame 中的每一行转换成一个元组&#xff0c;其中第一个元素是行号&#xff0c;第二个元素是该行的数据。行号从 0 开始。 在使用 df.iterrows() 遍历 DataFrame 的时候发现表格第二行…

CMD与DOS脚本编程【第六章】

预计更新 第一章. 简介和基础命令 1.1 介绍cmd/dos脚本语言的概念和基本语法 1.2 讲解常用的基础命令和参数&#xff0c;如echo、dir、cd等 第二章. 变量和运算符 2.1 讲解变量和常量的定义和使用方法 2.2 介绍不同类型的运算符和运算规则 第三章. 控制流程和条件语句 3.1 介…

组合数学第二讲

可以把取出来的数从小到大排序&#xff0c;第一个数不变&#xff0c;第二个数1&#xff0c;以此类推... 总共的情况为&#xff0c;数字取完后可再依次减回去&#xff0c;保证数在100以内 k-element multisets 引出下面的二项式系数 binomial coefficients&#xff08;二项式系…

FAT NTFS Ext3文件系统有什么区别

10 年前 FAT 文件系统还是常见的格式&#xff0c;而现在 Windows 上主要是 NTFS&#xff0c;Linux 上主要是Ext3、Ext4 文件系统。关于这块知识&#xff0c;一般资料只会从支持的磁盘大小、数据保护、文件名等各种维度帮你比较&#xff0c;但是最本质的内容却被一笔带过。它们最…

Glob 文件匹配

前言 glob本质是Unix shell 风格的路径匹配规则。 该规则后续被其它语言支持。 ?&#xff1a;匹配一个任意字符 *&#xff1a;匹配任意个任意字符 [sequence]&#xff1a;匹配出现在sequence里面的一个字符 [!sequence]&#xff1a;匹配没有出现在sequence里面的一个字符 [a…

Spark大数据处理讲课笔记---Spark RDD典型案例

零、本节学习目标 利用RDD计算总分与平均分利用RDD统计每日新增用户利用RDD实现分组排行榜 一、利用RDD计算总分与平均分 &#xff08;一&#xff09;提出任务 针对成绩表&#xff0c;计算每个学生总分和平均分 &#xff08;二&#xff09;实现思路 读取成绩文件&#xff…

java实现url链接的补全,获取到的链接是以/或 ./ 开头的相对链接,不是以http开头的,需要补全

一、实现的目标 在使用爬虫获取网页html数据时,解析到的链接是/或./ 开头的相对链接,不是以http开头的链接,如:/picture/0/cca65350643c441e80d390ded3975db0.png 。此时需要完成对该链接的补全,以得到正确的链接。 二、实现思路 对比完整的url链接和相对链接,进行分析,…

自动化测试框架搭建步骤教程

说起自动化测试&#xff0c;我想大家都会有个疑问&#xff0c;要不要做自动化测试&#xff1f; 自动化测试给我们带来的收益是否会超出在建设时所投入的成本&#xff0c;这个嘛别说是我&#xff0c;即便是高手也很难回答&#xff0c;自动化测试的初衷是美好的&#xff0c;而测试…

WebLogic:如何查看补丁版本

可以使用 /weblogic/bea/OPatch/下的opatch命令&#xff1a; /opatch lsinventory 执行结果&#xff1a; VOlogiciEDSP-APP-D-269:/opatch lsinventory Oracle Interim Patch Installer version 13.9.4_2_8 Copyright (c) 2023, Oracle Corporation. All rights reserved. Orac…

PHP程序员在外包公司的工作内容是什么,我来跟大伙聊一聊

今天呢&#xff0c;我要跟大家说一下&#xff0c;我在上班的主要工作内容。希望能为大家提供一些参考&#xff0c;让大家了解在外包公司&#xff0c;PHP程序员主要做些什么工作。 我们还会涉及到其他项目&#xff0c;比如Web开发、移动应用开发、数据分析和处理等。不同的项目…

群岛大战(C++)

群岛大战 英文题目&#xff1a;Problem StatementConstraintsInputOutputSample 1InputOutput Sample 2InputOutput Sample 3InputOutput 中文题目&#xff1a;问题陈述约束输出样本1输入输出 样本2输入输出 示例3输入输出 代码 英文题目&#xff1a; Problem Statement Ther…

一文把 JavaScript 中的 this 聊得明明白白

文章目录 1.this 是什么&#xff1f;2.this的指向2.1 全局上下文的 this 指向2.2 函数&#xff08;普通函数&#xff09;上下文中的 this 指向2.3 事件处理程序中的 this 指向2.4 以对象的方式调用时 this 的指向2.5 构造函数中的 this 指向2.6 在 类上下文中 this 的指向。2.7…

Flink第五章:处理函数

系列文章目录 Flink第一章:环境搭建 Flink第二章:基本操作. Flink第三章:基本操作(二) Flink第四章:水位线和窗口 Flink第五章:处理函数 文章目录 系列文章目录前言一、基本处理函数(ProcessFunction)二、按键分区处理函数&#xff08;KeyedProcessFunction&#xff09;1.处理…

一、尚医通登录需求

文章目录 一、登录需求1、登录效果2、登录需求 二、登录1&#xff0c;搭建service-user模块1.1 搭建service-user模块1.2 修改配置1.3 启动类1.4 配置网关 2、添加用户基础类2.1 添加model2.2 添加Mapper2.3 添加service接口及实现类2.4 添加controller 3、登录api接口3.1 添加…

linux系统升级/更新OpenSSL版本操作流程记录

问题描述&#xff1a;有时 OpenSSL 版本过老升级&#xff0c;或者需要更新 OpenSSL 版本 1. 登录 linux 系统后输入 openssl version 查看现在使用的版本 我的输入后版本信息为&#xff1a;OpenSSL 1.1.1g FIPS 21 Apr 2020 &#xff0c;可以看到是一年前更新版本&#xff0c;…

深入浅出 SQL Server CDC 数据同步

简介 SQL Server 是一款老牌关系型数据库,自 1988 年由 Microsoft、Sybase 和 Ashton-Tate 三家公司共同推出&#xff0c;不断迭代更新至今&#xff0c;拥有相当广泛的用户群体。 如今&#xff0c;我们提到 SQL Server 通常指 Microsoft SQL Server 2000 之后的版本。 SQL S…

网络安全里主要的岗位有哪些?小白如何快速入门学习黑客?

入门Web安全、安卓安全、二进制安全、工控安全还是智能硬件安全等等&#xff0c;每个不同的领域要掌握的技能也不同。 当然入门Web安全相对难度较低&#xff0c;也是很多人的首选。主要还是看自己的兴趣方向吧。 本文就以下几个问题来说明网络安全大致学习过程&#x1f447; 网…

什么是jquery jq的基本使用

JQuery的概述 jQuery是一个快速的&#xff0c;简洁的javaScript库&#xff0c;使用户能更方便地处理HTML documents、events、实现动画效果&#xff0c;并且方便地为网站提供AJAX交互。 jQuery能够使用户的html页保持代码和html内容分离&#xff0c;也就是说&#xff0c…

Java高并发核心编程—CAS与JUC原子类

注&#xff1a;本笔记是阅读《Java高并发核心编程卷2》整理的笔记&#xff01; CAS原理 JUC原子类一Atomic 基本原子类 数组原子类 引用原子类 字段更新原子类 AtomicInteger 线程安全原理 引用类型原子类 属性更新原子类 ABA问题 提升高并发场景下CAS提作的性能 以空间换时间:…
最新文章