【每日一题Day268】LC415字符串相加 | 模拟

该文章描述了一种在不使用大整数库或直接转换字符串为整数的情况下,通过双指针和模拟运算来计算两个字符串表示的非负整数之和的方法。算法从低位开始,逐位相加并处理进位,最后构建结果字符串。
摘要由CSDN通过智能技术生成

字符串相加【LC415】

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

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

Given two non-negative integers, num1 and num2 represented as string, return the sum of num1 and num2 as a string.

You must solve the problem without using any built-in library for handling large integers (such as BigInteger). You must also not convert the inputs to integers directly.

简单模拟运算

  • 思路:使用双指针从整数的最低位模拟相加操作

    • 使用两个指针从整数的低位开始定位字符,模拟相加操作
    • 使用变量记录低位的进位,将每位的相加结果放入StringBuilder变量的开头中
    • 每次相加后的结果为 ( v a l 1 + v a l 2 + c n t ) % 10 (val1+val2+cnt)\%10 (val1+val2+cnt)%10
    • 进位为 ( v a l 1 + v a l 2 + c n t ) / 10 (val1+val2+cnt)/10 (val1+val2+cnt)/10
  • 实现

    class Solution {
        public String addStrings(String num1, String num2) {
            StringBuilder sb = new StringBuilder();
            int i = num1.length() - 1, j = num2.length() - 1;
            int cnt = 0;
            while (i >= 0 || j >= 0 || cnt != 0){
                int val1 =  i >= 0 ? num1.charAt(i) - '0' : 0;
                int val2 =  j >= 0 ? num2.charAt(j) - '0' : 0;
                sb.insert(0,(val1+val2+cnt)%10);
                cnt = (val1+val2+cnt) / 10;
                i--;
                j--;
                
            }
            return new String(sb);
        }
    }
    
    • 复杂度
      • 时间复杂度: O ( n ) O(n) O(n),n为两个字符串的最大长度
      • 空间复杂度: O ( 1 ) O(1) O(1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值