LeetCode 415. 字符串相加 (暴力模拟 手算)

该博客介绍了如何在不允许使用内置大数库或直接转换字符串为整数的情况下,通过双指针和进位模拟计算两个非负整数(字符串表示)的和。文章提供了详细的Java代码实现,包括设置进位、遍历字符串逆序相加等步骤,确保正确处理进位情况。
摘要由CSDN通过智能技术生成

文章目录

题目

  • 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

提示:

num1 和num2 的长度都小于 5100
num1 和num2 都只包含数字 0-9
num1 和num2 都不包含任何前导零
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式

题解

  • 设置进位 carry ,双指针依次相加

在这里插入图片描述

  • 注意最后依次进位。
package leetcodePlan.Base;

public class P0415 {

	
	//   双指针 模拟人工加法
	public static void main(String[] args) {

	    String num1 ="12" ;
	    String num2 = "12" ;
	    System.out.println(fun(num1,num2));
	}
	
	public static String fun(String num1, String num2) {
		StringBuilder res = new StringBuilder("") ;
		// 记录双指针 以及进位 
		int i = num1.length() - 1 , j = num2.length() - 1  , carry = 0 ;
		
		while(i >= 0 || j >= 0 ) {    // 只要一个还有值
			int n1 = i >=0  ? num1.charAt(i) - '0' : 0 ;
			int n2 = j >=0  ? num2.charAt(j) - '0' : 0 ;
			
			int tmp = n1+n2 + carry ;
			carry = tmp/10 ;
			res.append(tmp%10) ;
			i-- ; 
			j-- ;
		}
		if(carry == 1) res.append(1) ; //   注意考虑最后一位进位
		return  res.reverse().toString() ;
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值