LeetCode:字符串相加【415】
LeetCode:字符串相加【415】
题目描述
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
注意:
num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
题目分析
这道题其实很简单,我们要搞清楚手工计算两数之和的流程。两数相加,和如果大于10的话就有进位,进位最高为1,默认为0,该位相加的和应为sum%10。
小学数学题哦,不多解释了!
Java题解
public static String addStrings(String num1, String num2) { int ptrNum1 = num1.length()-1 ; int ptrNum2 = num2.length()-1 ; int count = 0; StringBuilder result = new StringBuilder(); //1、从两数个位开始相加 while(ptrNum1>=0&&ptrNum2>=0){ //[a、换算成数字] int a = num1.charAt(ptrNum1)-'0'; int b = num2.charAt(ptrNum2)-'0'; //[b、计算位数之和,包含进位count] int sum = a+b+count; count = 0; //[c、如果和大于9,则有新进位] if(sum>9){ count =1; sum-=10; } //[d、将处理后sum插入结果] result.insert(0,sum); ptrNum1--; ptrNum2--; } //2、假如数字1还有高位未相加 while(ptrNum1>=0){ //[a、仅仅与进位值相加] int a =num1.charAt(ptrNum1)-'0'+count; count = 0; if(a>=10){ count =1; a-=10; } //[b、将处理后sum插入结果] result.insert(0,a); ptrNum1--; } //3、加入数字2还有高位未相加 while(ptrNum2>=0){ int a =num2.charAt(ptrNum2)-'0'+count; count = 0; if(a>10){ count =1; a-=10; } result.insert(0,a); ptrNum2--; } //4、考虑最高位进位的情况 if(count==1) result.append("1"); return result.toString(); }