【LeetCode】数学精选4题

目录

1. 二进制求和(简单)

2. 两数相加(中等)

3. 两数相除(中等)

4. 字符串相乘(中等)


1. 二进制求和(简单)

从字符串的右端出发向左做加法,逢二进一。

class Solution {
public:string addBinary(string a, string b) {string ans;int i = a.size() - 1; // a的下标是从0到iint j = b.size() - 1; // b的下标是从0到jint carry = 0 ; // 进位while (i >= 0 || j >= 0){int digitA = i >= 0 ? a[i--] - '0' : 0;int digitB = j >= 0 ? b[j--] - '0' : 0;int sum = digitA + digitB + carry;carry = sum >= 2 ? 1 : 0;sum = sum >= 2 ? sum - 2 : sum;ans += sum + '0';}if (carry){ans += '1';}reverse(ans.begin(), ans.end());return ans;}
};

2. 两数相加(中等)

class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode* preHead = new ListNode; // 哨兵节点ListNode* tail = preHead;int carry = 0; // 进位while (l1 || l2){int n1 = l1 ? l1->val: 0;int n2 = l2 ? l2->val: 0;int sum = n1 + n2 + carry;tail->next = new ListNode(sum % 10);carry = sum / 10;tail = tail->next;if (l1){l1 = l1->next;}if (l2){l2 = l2->next;}}if (carry){tail->next = new ListNode(carry);}return preHead->next;}
};

3. 两数相除(中等)

假设被除数是a,除数是b。

如果a、b都是正数,且a>=b

a最多大于b的2^k倍,将a减去b的2^k倍,剩下的被除数再重复这样的操作,直到a < b

以22除以3为例:

22最多大于3的4倍:22 - 3 * 4 = 10

10最多大于3的2倍:10 - 3 * 2 = 4

4最多大于3的1倍: 4 - 3 * 1 = 1

商是4 + 2 + 1 = 7,余数是1

如果a、b都是负数,且a <= b

a最多小于b的2^k倍,将a减去b的2^k倍,剩下的被除数再重复这样的操作,直到a > b

以-22除以-3为例:

-22最多小于-3的4倍:-22 - (-3) * 4 = -10

-10最多小于-3的2倍:-10 - (-3) * 2 = -4

-4最多小于-3的1倍: -4 - (-3) * 1 = -1

商是4 + 2 + 1 = 7,余数是-1

class Solution {
public:int divide(int dividend, int divisor) {// -2^31/-1=2^31 溢出if (dividend == INT_MIN){if (divisor == -1){return INT_MAX;}else if (divisor == 1){return INT_MIN;}}// 全部转化为负数,如果全部转化为正数,-2^31转化为正数会溢出int negative = 2; // 表示被除数和除数有几个是负数if (dividend > 0){dividend = -dividend;negative--;}if (divisor > 0){divisor = -divisor;negative--;}int result = divideCore(dividend, divisor);return negative == 1 ? -result : result;}private:int divideCore(int a, int b){int result = 0;while (a <= b){int k = 1;int val = b; // val表示b的2^k倍while (val >= INT_MIN / 2 && a <= val + val){k += k;val += val;}result += k;a -= val;}return result;}
};

4. 字符串相乘(中等)

无进位相乘后相加,再处理进位。

class Solution {
public:string multiply(string num1, string num2) {if (num1 == "0" || num2 == "0")return "0";int n1 = num1.size();int n2 = num2.size();reverse(num1.begin(), num1.end());reverse(num2.begin(), num2.end());vector<int> sums(n1 + n2 -1);// 无进位相乘后相加for (int i = 0; i < n2; i++){for (int j = 0; j < n1; j++){sums[i + j] += (num2[i] - '0') * (num1[j] - '0');}}// 处理进位string ans;int i = 0;int carry = 0;while (i < n1 + n2 -1){int sum = sums[i++] + carry;ans += sum % 10 + '0';carry = sum / 10;}if (carry){ans += carry + '0';}// 反转reverse(ans.begin(), ans.end());return ans;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/635401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQLAlchemy ORM指南:简化数据库操作的最佳实践

SQLAIchemy 开发指南 背景&#xff1a; ​ SQLAlchemy是一个数据库的ORM框架&#xff0c;让我们操作数据库的时候不要再用SQL语句了&#xff0c;跟直接操作模型一样。操作十分便捷&#xff0c;其实SQLAlchemy应该是在Flask和Django应用的特别多&#xff0c;而且在flask中已经…

Oracle架构_数据库底层原理、机制 (授人以渔)

目录 系统全局区SGA 高速缓存缓冲区(数据库缓冲区) 日志缓冲区 共享池 其他结构 用户连接进程 用户进程User Process Server Process服务进程 程序全局区PGA Oracle的connect连接和session会话与User Process紧密相关 后台进程 数据库写入进程(DBWn) 检查点(CKPT)…

多维时序 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积长短期记忆神经网络融合多头注意力机制多变量时间序列预测

多维时序 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积长短期记忆神经网络融合多头注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积长短期记忆神经网络融合多头注意力机制多变量时间序列预测效果一览基本介绍程序设计参考资料 效果…

“深入理解 Docker 和 Nacos 的单个部署与集成部署“

目录 引言&#xff1a;Docker Nacos 单个部署1.1 什么是 Docker&#xff1f;Docker 的概念和工作原理Docker 为什么受到广泛应用和认可 1.2 什么是 Nacos&#xff1f;Nacos 的核心功能和特点Nacos 在微服务架构中的作用 1.3 Docker 单个部署 Nacos Docker Nacos 集成部署总结&a…

【重点!!!】【背包】【回溯】518.零钱兑换II

题目 跟39.组合总数、322.零钱兑换题目很类似。 法1&#xff1a;背包DP&#xff0c;最优解法 解释如下&#xff1a; 0 1 2 3 4 5(背包容量)1 0 0 0 0 0 没有硬币的时候&#xff09; 0 1 2 3 4 5(背包容量) 1 1 1 1 1 1 1 0 1 2 3 4 5(背包容量) 1 …

Ubuntu 22.04 安装MySql

MySQL是非常常用的关系型数据库,无论是大厂还是小厂,都有它的身影。最大的优点是免费,安装起来也比较简单。 MySQL的架构 画了个简图,描述了下MySQL的架构。 其中的比较有趣的点在于连接池和存储引擎。连接池缓存了数据库和客户端的TCP连接,以减少建立连接的开销。存储引…

git中合并分支时出现了代码冲突怎么办

目录 第一章、Git代码冲突介绍1.1&#xff09;什么是Git代码冲突①git merge命令介绍②代码冲突原因 1.2&#xff09;提示代码冲突的两种情况①本地不同分支的文件有差异时&#xff1a;②本地仓库和git远程仓库的文件有差异时&#xff1a; 1.3&#xff09;解决合并时的代码冲突…

calloc与realloc和malloc的区别以及new

目录 calloc、realloc 和 malloc 三个函数的区别在于 更详细的示例代码 交叉使用 内存泄漏 悬空指针 内存重叠 new 的语法 使用 new 运算符在堆上创建学生对象的示例 new和malloc都可以用于在堆上分配内存 calloc、realloc 和 malloc 是 C/C 中用于动态内存分配的函…

Mermaid使用教程(绘制各种图)

Mermaid使用教程&#xff08;绘制各种图&#xff09; 文章目录 Mermaid使用教程&#xff08;绘制各种图&#xff09;简介饼状图简单的例子应用案例 序列图简单案例应用案例另一个应用案例 甘特图简单案例应用案例一个更为复杂的应用案例 Git图简单案例 总结 简介 本文将主要介…

Elastic 8.12:AI Assistant for Observability 正式发布,更新至 Apache Lucene 9.9

作者&#xff1a;来自 Elastic Brian Bergholm 今天&#xff0c;我们很高兴地宣布 Elastic 8.12 全面上市。 有哪些新的功能&#xff1f; 8.12 版本的两个最重要的组成部分包括 Elastic AI Assistant for Observability 的 正式发布版 和 Apache Lucene 9.9 的更新&#xff08…

CVE2020-1938漏洞复现

这个漏洞是tomcat的 然后我们先了解漏洞产生的原理 首先我们先来看tmocat纠结是干什么的 tomcat是个中间件 最主要的两个结构、 servlet的定义和部分源码&#xff0c; 漏洞就是从这来的 tomcat处理http请求 源码分析 tomcat 8.5.46 哎 这教学视频讲半天看不懂 不看原…

RAG中的3个高级检索技巧

RAG系统检索的文档可能并不总是与用户的查询保持一致&#xff0c;这是一个常见的现象。当文档可能缺乏查询的完整答案或者包含冗余信息或包含不相关的细节&#xff0c;或者文档的顺序可能与用户的意图不一致时&#xff0c;就会经常出现这种情况。 本文将探讨三种有效的技术来增…

DC-5靶机做题记录

靶机下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1aZRB-hqvqLlGUmAPFljnIA?pwdelxg 提取码&#xff1a;elxg 参考&#xff1a; DC5官方地址&#xff1a;https://www.vulnhub.com/entry/dc-5,314/DC5靶机地址&#xff1a;https://download.vulnhub.com/d…

2024年17款最好用的免费录制网课软件分享

近年来&#xff0c;在线课程越来越受欢迎&#xff0c;为学习者提供了方便、灵活的教育内容获取方式。随着电子学习和网络培训的兴起&#xff0c;有许多工具可以帮助课程创建者记录和编辑其在线内容。虽然市场上有许多免费和付费工具&#xff0c;但本文将重点介绍 17 个用于录制…

前端学习路线图和一些经验

关于前端目前个人建议的一个路线,也是自己之前前端学习时候的一个大致路线,给想要学习前端的小白一个参考,以前自己刚开始接触前端的时候就是不知道该按照什么路线学习 eg-前端是做什么的&#xff1f; 就是开发网站,移动端&#xff0c;小程序之类的页面 调调接口完成页面的渲…

Ansible详解(架构,模块)及部署示例

Ansible概述 Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点&#xff0c;几乎可以实现Puppet和Saltstack能实现的功能。 Ansible是一款开源的IT自动化工具&#xff0c;它能够自动执行配置管理、…

如何免费从 SD 卡恢复已删除的文件?(照片、视频、MP3)

今天我们将告诉您如何免费从格式化的 SD 卡或闪存卡恢复文件。 特别是如果您是一名摄影师、博主或任何处理内容的人&#xff0c;您的 SD 卡上有一些内容&#xff0c;但您不小心删除或格式化了&#xff0c;现在您要向自己道歉。 无需担心&#xff0c;因为今天我们将告诉您如何…

vue写了debugger谷歌浏览器打开控制台没进断点

vue代码中打了断点&#xff0c;谷歌打开f12进不了断点解决方案如下 1、打开谷歌浏览器控制台&#xff0c;点击设置 2、在 Ignore List 中将“Enable Ignore Listing”勾选去掉&#xff0c;然后就可以正常使用debugger了

为了最大限度利用带宽,传输通道容量如何计算

一、结论&#xff1a; 传送通道容量 带宽 ✖️ 往返时延 二、过程&#xff1a; 1、传播时延和发送时延&#xff08;带宽&#xff09;通常决定一个报文的发送时间。 传输介质确定的时候&#xff0c;传播时延固定&#xff0c;发送时延根据数据报文的大小而不同。 ①传播时延…

GPT应用开发:编写插件获取实时天气信息

欢迎阅读本系列文章&#xff01;我将带你一起探索如何利用OpenAI API开发GPT应用。无论你是编程新手还是资深开发者&#xff0c;都能在这里获得灵感和收获。 本文&#xff0c;我们将继续展示聊天API中插件的使用方法&#xff0c;让你能够轻松驾驭这个强大的工具。 插件运行效…