| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 解决力扣字符串相加和相乘问题 -> 正文阅读 |
|
[数据结构与算法]解决力扣字符串相加和相乘问题 |
目录 今日良言:花有重开日,人无再少年一、字符串相加1.问题描述 给定两个字符串形式的非负整数?num1 和num2?,计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库(比如 BigInteger),?也不能直接将输入的字符串转换为整数形式。 例如: 输入:num1 = "11", num2 = "123" 输出:"134" 2.解决思路 a. 题目要求不可以使用库,以及不能直接将输入的字符串换成整数形式,所以说我们放弃这种思路。 b.首先针对相加问题,我们要先考虑进位的问题,从后向前进位,那么我们不妨将两个字符串从后向前加,每次拿到两个字符串的下标的字符,然后转成整数,注意:我们需要考虑两个字符串不相等的情况,所以用一个下表来表示两个字符串显然是不行的,那么我们使用 i 和 j 两个变量来表示下标,i 和 j? 的初始值就是两个字符串的长度-1 。 c.那么确定了下标以后,我们需要考虑,如果有一个字符串为空了,该如何计算?? 实际上,我们可以将为空的那个字符串(也就是 i 或者 j? < 0)的字符直接当作0即可,即使参与运算也不会影响结果。 d.假设此时两个字符串的下标都合法,对应的值为x和y,那么将其转换成数字以后,我们需要考虑进位,因此我们设置一个变量 add 表示每次需要向前进位的数字,也就是 add =(x + y)/ 10 。 e.我们使用StringBuffer来进行字符串拼接,那么我们每次拼接的值是多少呢?实际上当前x+y+add(向前进位的值)% 10 就是我们需要拼接的值。 f.不难看出,上述操作实际上是一个循环,条件是 i >=0 || j>=0 || add > 0? ? ?add这个条件存在的意思是:可能最后相加的结果还是要向前进位,我们不能舍去这个进位的值。 3.代码实现
4.题目链接 5.相似题目 解法:
二、字符串相乘1.问题描述 给定两个以字符串形式表示的非负整数?num1?和?num2,返回?num1?和?num2?的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 例如: 输入: num1 = "123", num2 = "456" 输出: "56088" 2.解决思路 a.字符串相乘无法直接使用字符串相加的计算方式。首先,我们需要观察一个规律,如下图: ?这里num1和num2是需要计算的字符串中的数字,result是我们创建的需要存储的计算结果。观察上述下标,有什么发现?? 假设 i 是num1的下标,j 是 num2的下标, num1[i] * num2[j] 的结果在result[i+j] 中。 b.首先我们可以创建一个两个字符串长度相加的长度的数组result用于存储计算结果,假设num1的长度为n,num2的长度为m,那么创建的result容纳的数据就是m+n 个,为什么创建m+n呢?因为,假设都是多大的两位数99相乘,他们的计算结果的长度一定不比m+n大。 c.如果只是将两个字符串每个位置的计算结果都放在 result的 i + j 下标处的话,那么最高位的进位就会被忽略,所以说,我们不妨空出来一个位置存放需要像最高位进的那个值。 用代码实现就是:? result[i + j + 1] = num1[i] + num2[j];? ? d.然后我们需要考虑进位的问题,从后向前遍历result数组,满10就进位。 e.进位结束后,我们创建一个 StringBuffer 类型的 str 用来拼接result中的计算结果,但是,由于之前我们将result的0下标空了出来,如果没有向0下标进位,那么该位置就应该删除,所以我们需要考虑是否删除该下标处的值。 f.最后将其转换成字符串返回即可? 3.代码实现
4.题目链接 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:47:15- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |