【算法千题案例】每日LeetCode打卡——75.字符串相加

简介: 📢前言🌲原题样例:字符串相加🌻C#方法:排序遍历🌻Java 方法:计数💬总结

📢前言

🚀 算法题 🚀

🌲 每天打卡一道算法题,既是一个学习过程,又是一个分享的过程😜

🌲 提示:本专栏解题 编程语言一律使用 C# 和 Java 两种进行解题

🌲 要保持一个每天都在学习的状态,让我们一起努力成为算法大神吧🧐!

🌲 今天是力扣算法题持续打卡第75天🎈!

🚀 算法题 🚀

🌲原题样例:字符串相加

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


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

示例1:

输入:num1 = "11", num2 = "123"
输出:"134"

示例2:

输入:num1 = "456", num2 = "77"
输出:"533"

示例3:

输入:num1 = "0", num2 = "0"
输出:"0"

提示:


1 <= num1.length, num2.length <= 104

num1 和num2 都只包含数字 0-9

num1 和num2 都不包含任何前导零

🌻C#方法:排序遍历

模拟手工计算,右对齐后,从后往前算

模拟完成以后,得到了字符数组,就是两个字符串的加和结果

代码:

public class Solution {
        public string AddStrings(string num1, string num2)
        {
            var numArray = GetNumArray();
            var forReturnArray = new char[Math.Max(num1.Length, num2.Length) + 1];
            var oneIndex = num1.Length - 1;
            var twoIndex = num2.Length - 1;
            var arrayIndex = forReturnArray.Length - 1;
            var initNum = 0;
            while (oneIndex >= 0 || twoIndex >= 0)
            {
                var oneNum = 0;
                if (oneIndex >= 0)
                    oneNum = num1[oneIndex--] - '0';
                var twoNum = 0;
                if (twoIndex >= 0)
                    twoNum = num2[twoIndex--] - '0';
                var sumTemp = initNum + oneNum + twoNum;
                forReturnArray[arrayIndex--] = numArray[sumTemp % 10];
                initNum = sumTemp / 10;
            }
            if (initNum > 0)
            {
                forReturnArray[arrayIndex] = numArray[initNum];
                return new string(forReturnArray);
            }
            return new string(forReturnArray.Skip(1).ToArray());
        }
        private char[] GetNumArray()
        {
            var numArray = new char[10];
            for (var i = '0'; i <= '9'; i++)
                numArray[i - '0'] = i;
            return numArray;
        }
}

执行结果

通过
执行用时:88 ms,在所有 Java  提交中击败了44.50%的用户
内存消耗:37.4 MB,在所有 Java 提交中击败了38.90%的用户

🌻Java 方法:计数

思路解析

本题只需要对两个大整数模拟「竖式加法」的过程。


竖式加法就是我们平常学习生活中常用的对两个整数相加的方法,回想一下我们在纸上对两个整数相加的操作,是不是如下图将相同数位对齐,从低到高逐位相加,如果当前位和超过 10,则向高位进一位?

因此我们只要将这个过程用代码写出来即可。


image.png

具体实现也不复杂,我们定义两个指针 i 和 j 分别指向 num1 和 num2 的末尾,即最低位,同时定义一个变量 add 维护当前是否有进位,然后从末尾到开头逐位相加即可。

你可能会想两个数字位数不同怎么处理,这里我们统一在指针当前下标处于负数的时候返回 0,等价于对位数较短的数字进行了补零操作,这样就可以除去两个数字位数不同情况的处理,具体可以看下面的代码。

代码:

class Solution {
    public 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 ms,在所有 Java  提交中击败了94.76%的用户
内存消耗:38.4 MB,在所有 Java 提交中击败了52.40%的用户

复杂度分析

时间复杂度:O( max(l1,l2))
空间复杂度:O(1)

💬总结

  • 今天是力扣算法题打卡的第七十五天!
  • 文章采用 C#Java 两种编程语言进行解题
  • 一些方法也是参考力扣大神写的,也是边学习边分享,再次感谢算法大佬们
  • 那今天的算法题分享到此结束啦,明天再见!


相关文章
|
5月前
|
人工智能 编解码 算法
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
本文介绍了通义灵码2.0 AI程序员在嵌入式开发中的实战应用。通过安装VS Code插件并登录阿里云账号,用户可切换至DeepSeek V3模型,利用其强大的代码生成能力。实战案例中,AI程序员根据自然语言描述快速生成了C语言的base64编解码算法,包括源代码、头文件、测试代码和CMake编译脚本。即使在编译错误和需求迭代的情况下,AI程序员也能迅速分析问题并修复代码,最终成功实现功能。作者认为,通义灵码2.0显著提升了开发效率,打破了编程语言限制,是AI编程从辅助工具向工程级协同开发转变的重要标志,值得开发者广泛使用。
8335 71
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
|
3月前
|
Go 索引
【LeetCode 热题100】394:字符串解码(详细解析)(Go语言版)
本文详细解析了 LeetCode 热题 394:字符串解码。题目要求对编码字符串如 `k[encoded_string]` 进行解码,其中 `encoded_string` 需重复 `k` 次。文章提供了两种解法:使用栈模拟和递归 DFS,并附有 Go 语言实现代码。栈解法通过数字栈与字符串栈记录状态,适合迭代;递归解法则利用函数调用处理嵌套结构,代码更简洁。两者时间复杂度均为 O(n),但递归需注意栈深度问题。文章还总结了解题注意事项及适用场景,帮助读者更好地掌握字符串嵌套解析技巧。
85 6
|
4月前
|
存储 机器学习/深度学习 缓存
🚀 力扣热题 394:字符串解码(详细解析)(Go语言版)
文章提供了两种解法:栈结构和递归解法。栈解法通过维护数字栈与字符串栈,依次处理 `[` 和 `]`,构造解码结果;递归解法则利用函数调用逐层解析嵌套结构。两者时间复杂度均为 $O(n)$,空间复杂度也为 $O(n)$。栈解法直观易懂,适合初学者;递归解法优雅简洁,适合处理深度嵌套规则。掌握这两种方法,可灵活应对类似问题,提升解题能力。
127 11
|
9月前
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
157 0
|
8月前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
160 4
|
9月前
|
存储 算法 搜索推荐
这些算法在实际应用中有哪些具体案例呢
【10月更文挑战第19天】这些算法在实际应用中有哪些具体案例呢
178 1
|
9月前
|
JavaScript
力扣3333.找到初始输入字符串Ⅱ
【10月更文挑战第9天】力扣3333.找到初始输入字符串Ⅱ
84 1
|
9月前
|
C++
Leetcode第43题(字符串相乘)
本篇介绍了一种用C++实现的字符串表示的非负整数相乘的方法,通过逆向编号字符串,将乘法运算转化为二维数组的累加过程,最后处理进位并转换为字符串结果,解决了两个大数相乘的问题。
65 9
|
9月前
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
85 2
|
9月前
|
算法 数据可视化 新制造
Threejs路径规划_基于A*算法案例完整版
这篇文章详细介绍了如何在Three.js中完整实现基于A*算法的路径规划案例,包括网格构建、路径寻找算法的实现以及路径可视化展示等方面的内容。
258 0
Threejs路径规划_基于A*算法案例完整版

热门文章

最新文章