leetcode题目 415. 字符串相加

题目

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

注意:

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

示例

输入:“256”
“232”
输出:“488”

解法

我们直接模拟加法过程(按位相加,溢出补一)
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(图片来源于网络)

代码

代码里面其实还是有些取巧的部分,提供两种写法,思路一样,但第二种简洁很多。

public class problem415 {
	public String addStrings(String num1, String num2) {
        String res="";
        
        //分别表示num1、num2的指针,从尾部开始
        int i=num1.length()-1;
        int j=num2.length()-1;
        int m=0;
        int n=0;
        int carry=0;//代表当前位相加是否产生进位
        int tmp;
        
        while(i>=0||j>=0){
        	
        	if(i>=0) m=Integer.parseInt(num1.charAt(i)+"");
        	else m=0;
        	
        	if(j>=0) n=Integer.parseInt(num2.charAt(j)+"");
        	else n=0;
        	
        	tmp=n+m+carry;//求和
//        	System.out.println("tmp"+tmp);
        	
        	res=tmp%10+res;
        	
        	carry=tmp/10;
        	
        	i--;
        	j--;
        }
        
        if(carry==1) res=1+res;
        
        return res;
    }
	public static void main(String[] args) {
		problem415 pro=new problem415();
		System.out.println(pro.addStrings("858", "222"));
	}
}

public class problem415_2 {
	public String addStrings(String num1, String num2) {
        StringBuilder res=new StringBuilder();
        
        int carry=0;//临时和
        int i=num1.length()-1;
        int j=num2.length()-1;
        while(i>=0||j>=0||carry!=0){
        	if(i>=0) carry+=num1.charAt(i--)-'0';
        	if(j>=0) carry+=num2.charAt(j--)-'0';
        	res.append(carry%10);
        	carry=carry/10;
        }
        
        return res.reverse().toString();
    }
	public static void main(String[] args) {
		problem415_2 pro=new problem415_2();
		System.out.println(pro.addStrings("858", "222"));
	}
}

发布了15 篇原创文章 · 获赞 0 · 访问量 171

猜你喜欢

转载自blog.csdn.net/qq_36360463/article/details/104102090