算法通关村——数组加法

数组加法

1、数组实现整数加法

LeetCode66. 由整数组成的非空数组所表示的非负整数,在其基础上加一。这里最高位数字存放在数组的首位,数组中每个元素只存储单个数字。并且假设除了整数0之外,这个整数不会以0开头。

示例:

输入:digits = [1, 2, 3]

输出:[1, 2, 4]

这题从后向前依次加就行了,如果有进位就标记一下,只有一个位置需要注意:

当digits = [9, 9],从后往前加的时候,到了digits[0]的位置计算为0,需要再次进位但是数组的长度不够了。

我们可以用以下的方法去处理:

我们可以知道,只有当9,99,999……这样的结构才会出现加1之后原数组长度不够的情况,而进位后的结果一定是10,100,1000……这样的结构,由于java中数组的默认初始化为0,所以我们此时只用申请一个比原digits大一个的数组,然后将其第一个元素设置为1就可以了,具体的代码如下:

public static int[] plusOne(int[] digits) {int len = digits.length;for (int i = len - 1; i >= 0; i--) {digits[i]++;digits[i] %= 10;if (digits[i] != 0)return digits;}// 比较巧妙的设计digits = new int[len + 1];digits[0] = 1;return digits;
}

2、字符串加法

我们继续讨论数字保存在字符串中的情况,字符串加法就是使用字符串来表示数字,然后计算他们的和。具体要求如下:

给定两个字符串形式的非负整数num1和num2,计算他们的和并同样以字符串的形式返回。你不能使用任何内奸的用于处理大整数的库(比如BigInteger),也不能直接将输入的字符串转换为整数形式。

示例:

输入:num1 = “456”, num2 = “77”

输出:“533”

在十进制加法中,数字与数字相加是从低到高逐位相加,如果当前位的和超过了10,则向高位进一位。

我们只要将这个过程用代码写出来即可。先定义两个指针i和j分别指向num1和num2的末尾,即最低位,同时定义一个变量add用来维护当前是否有进位,然后从末尾到开头逐位相加。如果两个数字的位数不一样,则高位补0。

代码如下:

public static String addStrings(String num1, String num2) {int i = num1.length() - 1, j = num2.length() - 1, add = 0;StringBuffer ans = new StringBuffer();while (i >= 0 || j >= 0 || add != 0) {int x = i >= 0 ? num1.charAt(i) - '0' : 0;int y = j >= 0 ? num2.charAt(j) - '0' : 0;int result = x + y + add;ans.append(result % 10);add = result / 10;i--;j--;}// 计算完以后的答案需要翻转过来ans.reverse();return ans.toString();
}

如果不是十进制加法呢?其实也是这么去处理,这里就涉及了加法进位的本质,是几进制的加法,就在一个位的和超过了几的时候进位,例如二进制,就是当一个位上的和大于2就向前进一位,相关的题目如下:

3、二进制加法

LeetCode67.给你两个二进制字符串,这个字符串是用数组保存的,返回它们的和(用二进制表示)。其中输入为非空字符串且只包含数字1和0。

示例:

输入:a = “11”, b = “1”

输出:“100”

代码如下:

public static String addBinary(String a, String b) {StringBuilder ans = new StringBuilder();int ca = 0;for (int i = a.length() - 1, j = b.length() - 1; i >= 0 || j >= 0; i--, j--) {int sum = ca;sum += i >= 0 ? a.charAt(i) - '0' : 0;sum += j >= 0 ? b.charAt(j) - '0' : 0;ans.append(sum % 2);ca = sum / 2;}ans.append(ca == 1 ? ca : "");return ans.reverse().toString();
}

可以看到,十进制加法和二进制加法对进位的处理是一样的:

//十进制
ans.append(result % 10);
add = result / 10;
//二进制
ans.append(sum % 2);
ca = sum / 2;

如果是三进制或者四进制,只用将取模运算和除运算后面的数字替换成对应的进制就好了。

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

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

相关文章

【兔子王赠书第9期】ChatGPT进阶:提示工程入门

文章目录 写在前面ChatGPT推荐图书关键点编辑推荐内容简介推荐理由 粉丝福利写在后面 写在前面 人类一直在寻找、制造并使用工具,以扩展我们的能力,适应我们的环境,甚至超越我们的生物限制。现在,我们正站在一个历史性的分水岭之…

Jetpack Compose中适应性布局的新API

Jetpack Compose中适应性布局的新API 针对大屏幕优化的新组合件。 使用新的Material适应性布局,为手机、可折叠设备和平板电脑构建应用程序变得更加简单!市场上各种不同尺寸的Android设备的存在挑战了构建应用程序时对屏幕尺寸的通常假设。开发者不应该…

c4d三维动画制作推荐 Cinema 4D 2024 中文for mac

功能介绍 场景管理器 Cinema 4D新内核的强大功能让您可以使用灵活的基于节点的资产来实现程序化的几何体创建、克隆等。 烟火 从Cinema 4D的任何物体或样条发射火焰、烟 雾和爆炸-加热! 建模 引入用于重新拓扑的 ZRemesher、新的交互式建模工具、高级样条节点、对…

Kotlin中常见的List使用

文章目录 1.filter2.map3.count4.first,last5.any,all,none6.find,findLast7.indexOf()和lastIndexOf()查找元素下标8.Slice切片9.Take()和drop()获取指定长度 1.filter filter 就像其本意一样,可以通过 filter 对 Kotlin list 进行过滤。 fun main() …

03_歌词滚动效果

03_歌词滚动效果 文章目录 03_歌词滚动效果效果一、数据准备①:歌词②:音频等 二、代码实现①:首页②:样式③:js逻辑④:测试 效果 一、数据准备 ①:歌词 var lrc [00:00.95]夜微凉 - 徐珊 [0…

Glare or Gloom, I Can Still See You – End-to-End Multi-Modal Object Detection

SENSOR-AWARE MULTI-MODAL FUSION G-log(-log(U)),U~Uniform[0,1] 辅助信息 作者未提供代码

用python自行开发的流星监控系统meteor_monitor(第一篇)

代码: https://github.com/xingxinghuo1000/meteor_monitor_scripts.git 由于代码做了较大调整,废弃了sikuli部分。本篇文章为旧的,不要看了,最新文章请看: 用python自行开发的流星监控系统meteor_monitor&#xff0…

【解决方案】安科瑞智能照明系统在福建二建大厦项目上的研究与应用

【摘要】:智能化已经成为当今建筑发展的主流技术、涵盖从空调系统、消防系统到安全防范系统以及完善的计算机网络和通信系统。但是长期以来、智能照明在国内一直被忽视、大多数建筑物仍然沿用传统的照明控制方式、部分智能大厦采用楼宇自控(BA&#xff0…

Java 8新特性Optional的使用以及判空案例

Java 8新特性:Optional的使用及判空案例 在Java 8中,引入了一个重要的类Optional,它是为了解决空指针异常(NullPointerException)而设计的。Optional可以作为一个容器,可以包含一个非空的值或者为空。 Opti…

锂电池污水如何处理

锂电池是目前应用广泛的重要电池类型,然而其生产过程和废弃处理中产生的污水对环境造成了不可忽视的影响。本文将探讨锂电池污水的处理方法,以期为环境保护和可持续发展作出贡献。 首先,了解锂电池污水的组成是解决问题的关键。锂电池污水通…

防雷接地电阻和接地网的区别及其应用

接地是电气工程中的一种重要的安全措施,它可以保护电气设备和人员免受雷击和过电压的危害,也可以提高电气系统的运行稳定性和可靠性。接地的基本原理是将电气设备或人体与大地连接成同一电位,从而消除或减小危险电压。 地凯科技接地的实现方式…

PHP 针对人大金仓KingbaseES自动生成数据字典

针对国产数据库 人大金仓KingbaseES 其实php 连接采用pdo方式 必须&#xff1a;需要去人大数据金仓官方网站 下载对应版本的pdo_kdb 扩展驱动 其连接方法与pgsql 数据库连接方法大致相同 不解释 直接上代码&#xff1a; <?php /*** 生成人大金仓数据字典*/ header(…

【Android知识笔记】性能优化专题(五)

App瘦身优化 随着业务迭代,apk体积逐渐变大。项目中积累的无用资源,未压缩的图片资源等,都为apk带来了不必要的体积增加。而APK 的大小会影响应用加载速度、使用的内存量以及消耗的电量。 瘦身优势: 最主要是转换率:下载转换率头部 App 都有 Lite 版渠道合作商要求了解 …

上海亚商投顾:北证50指数大涨 逾百只北交所个股涨超10%

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指11月24日震荡调整&#xff0c;深成指、创业板指盘中跌超1%。北证50指数大涨超6%&#xff0c;北交所个股持…

BGP路由的选路综合实验

题目要求 1.使用PreVal策略&#xff0c;确保R1通过R3到达192.168.10.0/24 2.使用AS_Path策略&#xff0c;确保R1通过R3到达192.168.11.0/24 3.配置MED策略&#xff0c;确保R1通过R3到达192.168.12.0/24 4.使用Local Preference策略&#xff0c;确保R4通过R2到达192.168.1.0/24…

git-2

1.分离头指针情况下的注意事项 分离头指针指的是变更没有基于某个branch去做&#xff0c;所以当进行分支切换的时候&#xff0c;在分离头指针上产生的commit&#xff0c;很可能会被git当作垃圾清理掉&#xff0c;如果你认为是重要的内容&#xff0c;切记需要绑定分支 2.进一步…

2023机器人灵巧手的分类与商业化应用及未来市场规模分析报告

今天分享的是机器人系列深度研究报告&#xff1a;《2023机器人灵巧手的分类与商业化应用及未来市场规模分析报告》。 &#xff08;报告出品方&#xff1a;深度行业分析研究&#xff09; 报告共计&#xff1a;26页 1 灵巧手是人形机器人重要的运控交互部件&#xff0c;近年来海…

MyBatis-Plus条件构造器

说明 Wrapper&#xff1a;条件构造抽象类&#xff0c;最顶端父类AbstractWrapper&#xff1a;用于查询条件封装&#xff0c;生成sql的where条件QueryWrapper&#xff1a;查询条件封装UpdateWrapper&#xff1a;更新条件封装AbstractLambdaWrapper&#xff1a;使用Lambda语法La…

Sass中如何使用选择器继承来精简CSS详细教程

文章目录 前言使用选择器继承来精简CSS何时使用继承继承的高级用法继承的工作细节使用继承的最佳实践后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Sass和Less &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握…

和鲸ModelWhale平台与海光人工智能加速卡系列完成适配认证,夯实 AI 应用核心底座

AIGC 浪潮席卷&#xff0c;以大模型为代表的人工智能发展呈现出技术创新快、应用渗透强、国际竞争激烈等特点。创新为本&#xff0c;落地为王&#xff0c;技术的快速发展与大规模训练需求的背后&#xff0c;是对平台化基础设施与 AI 算力的更高要求。在此全球 AI 产业竞争的风口…