【算法详解】力扣415.字符串相加

这篇具有很好参考价值的文章主要介绍了【算法详解】力扣415.字符串相加。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、题目描述

力扣链接:力扣415.字符串相加

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

示例 1:

输入:num1 = “11”, num2 = “123”
输出:“134”

二、思路解析

这里题目不允许使用字符串转整数的函数,那么还有一个方法,那就是对字符串的每一个字符都减去'0',就可以得到对应的数字。

在很多编程语言中,字符和数字之间存在ASCII码(或Unicode码)的关系。ASCII码是一种将字符映射到数字的编码方式。在ASCII码中,数字字符'0''9'的编码是连续的,依次为4857。因此,当你从字符 ‘0’ 中减去 ‘0’ 时,实际上是将字符的ASCII码值减去 ‘0’ 的ASCII码值,得到的结果就是字符所表示的数字。

举例来说:

  • ‘0’ 的ASCII码是 48,所以 ‘0’ - ‘0’ 就是 48 - 48,结果是 0。
  • ‘1’ 的ASCII码是 49,所以 ‘1’ - ‘0’ 就是 49 - 48,结果是 1。
  • ‘2’ 的ASCII码是 50,所以 ‘2’ - ‘0’ 就是 50 - 48,结果是 2。
  • 以此类推,直到 ‘9’ 的ASCII码是 57,所以 ‘9’ - ‘0’ 就是 57 - 48,结果是 9。

三、C++题解

根据以上结论,不难写出代码:文章来源地址https://www.toymoban.com/news/detail-815921.html

class Solution {
public:
    string addStrings(string num1, string num2) {
        int m = num1.size(), n = num2.size();
        int i = m - 1, j = n - 1, carry = 0; // carry代表进位
        string result;

        while (i >= 0 || j >= 0 || carry != 0) {
            int x = i >= 0 ? num1[i] - '0' : 0;
            int y = j >= 0 ? num2[j] - '0' : 0;
            int sum = x + y + carry;
            carry = sum / 10;

            result.push_back('0' + sum % 10);
            --i;
            --j;
        }
		
		// 因为是倒着push_back的,所以要反过来
        reverse(result.begin(), result.end());

        return result;
    }
};

到了这里,关于【算法详解】力扣415.字符串相加的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 字符串相加(力扣)

    Problem: 415. 字符串相加 创建一个StringBuilder对象使用append方法追加每位数字相加,使用双指针的方式,指针i,j分别指向num1和num2的每位数字,从后往前,进位用carry存储着。 得到答案后,然后反转StringBUilder再转化为String即可。 时间复杂度: O(max) max表示两个字符串中最长的一个

    2024年02月16日
    浏览(39)
  • 算法学习——LeetCode力扣字符串篇

    344. 反转字符串 - 力扣(LeetCode) 描述 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 示例 1: 输入:s = [“h”,“e”,“l”

    2024年02月20日
    浏览(43)
  • 【力扣每日一题】2023.7.17 字符串相加

    题面很简单,就是要将两个字符串看作是数字然后相加,将最后结果转为字符串返回即可. 看到这题我的第一反应是直接转成数字再相加再转成字符串,像是这样: 但这样就不符合题目要求了( 这不是主要原因 ) ,并且遇到大数就无法转成整型也无法计算了. 所以需要像是我们列竖式

    2024年02月16日
    浏览(30)
  • 【每日挠头算法(4)】字符串相加|字符串相乘

    点我直达~ 1.将两个字符串从右往左开始进行相加,使用一个变量 ans 表示进位,如果两个字符串的个位加法和大于10,那么让进位+1,个位和再%10,然后将结果存入到新的字符串 strRet 中 2.两个字符串的十位和十位继续相加,并且需要加上个位的进位 ans ,步骤同1 3.这样不断相

    2024年02月09日
    浏览(53)
  • 算法学习——LeetCode力扣补充篇11(64. 最小路径和、48. 旋转图像 、169. 多数元素、394. 字符串解码、240. 搜索二维矩阵 II )

    64. 最小路径和 - 力扣(LeetCode) 描述 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例 示例 1: 输入:grid = [[1,3,1],[1,5,1],[4,2,1]] 输出:7 解释:因为路径 1→3→1→

    2024年04月23日
    浏览(37)
  • 【leetcode 力扣刷题】字符串匹配之经典的KMP!!!

    以下是能用KMP求解的算法题,KMP是用于字符串匹配的经典算法【至今没学懂………啊啊啊】 题目链接:28. 找出字符串中第一个匹配项的下标 题目内容: 题意还是很好理解的,要在字符串haystack中查找一个完整的needle,即字符串匹配。 暴力求解就是用 两层循环 :haystack从第

    2024年02月09日
    浏览(40)
  • 【leetcode 力扣刷题】字符串翻转合集(全部反转///部分反转)

    题目链接:344. 反转字符串 题目内容: 题目中重点强调了必须 原地修改 输入数组,即不能新建一个数组来完成字符串的反转。我们注意到: 原来下标为0的,反转后是size - 1【原来下标是size - 1的,反转后是0】; 原来下标是1的,反转后是size - 2【原来下标是size -2的,反转后

    2024年02月11日
    浏览(43)
  • 力扣热门算法题 349. 两个数组的交集,387. 字符串中的第一个唯一字符,394. 字符串解码

    349. 两个数组的交集,387. 字符串中的第一个唯一字符,394. 字符串解码,每题做详细思路梳理,配套PythonJava双语代码, 2024.04.02 可通过leetcode所有测试用例。 目录 349. 两个数组的交集 解题思路 完整代码 Python Java 387. 字符串中的第一个唯一字符 解题思路 完整代码 Python Java

    2024年04月08日
    浏览(43)
  • leetcode刷题(字符串相加、包含每个查询的最小区间、模拟行走机器人、环形子数组的最大和、满足不等式的最大值、四数之和、树中距离之和)

    目录 1、字符串相加 2、包含每个查询的最小区间 3、模拟行走机器人 4、环形子数组的最大和 5、满足不等式的最大值 6、四数之和 7、 树中距离之和

    2024年02月10日
    浏览(44)
  • 面试热题(字符串相加)

    给定两个字符串形式的非负整数  num1  和 num2  ,计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库(比如  BigInteger ), 也不能直接将输入的字符串转换为整数形式。       字符串相加这道题其实对于很多人来说是有挑战性的,因为有进

    2024年02月14日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包