领扣(LeetCode)字符串相加 个人题解

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

注意:

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

这道题比较简单,有一种主流的思路是模拟逻辑电路相加的做法。实现对字符串补0,让两个字符串都达到同样长度,然后再设置一个进位标志位,逐次相加。

这里要注意相加到最后的进位问题,记得增加进位位。

其他的做法不再累述,特别是使用Java做这个题,有点不务正业的感觉,因为Java把库都内建得很好了,代码中还是用到了把ASCII码转为字符的内建方法。

代码可以更加精炼,不过既然是模拟题,还是按部就班做出来比较好。

代码如下:

 1 class Solution {
 2     public String addStrings(String num1, String num2) {
 3         int cf = 0;
 4         String ans = "";
 5         String zerostr = "";
 6         if (num1.length() < num2.length()) {
 7             for (int i = 0; i < num2.length() - num1.length(); i++)
 8                 zerostr += "0";
 9             num1 = zerostr + num1;
10         } else {
11             for (int i = 0; i < num1.length() - num2.length(); i++)
12                 zerostr += "0";
13             num2 = zerostr + num2;
14         }
15         System.out.println(num1 + " " + num2);
16         for (int i = num1.length(); i >= 0; i--) {
17             String tmpstr = "";
18             int tmp1 = num1.charAt(i) - '0';
19             int tmp2 = num2.charAt(i) - '0';
20             if (tmp1 + tmp2 + cf >= 10) {
21                 tmpstr = Integer.toString(tmp1 + tmp2 - 10 + cf);
22                 cf = 1;
23             } else {
24                 tmpstr = Integer.toString(tmp1 + tmp2 + cf);
25                 cf = 0;
26             }
27             ans = tmpstr + ans;
28         }
29         if (cf == 1)
30             ans = "1" + ans;
31 
32         return ans;
33     }
34 }
原文地址:https://www.cnblogs.com/axiangcoding/p/9978189.html