• 领扣(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 }
  • 相关阅读:
    前端面试题六
    前端面试题五
    前端面试题四
    前端面试题之三
    前端面试题分享二
    前端面试题分享一
    JS学习笔记一
    git使用学习笔记一
    常见User-Agent
    ado.net之SQLServer和Oracle (sys_cursor) 数据库链接——获取结果集方式对比
  • 原文地址:https://www.cnblogs.com/axiangcoding/p/9978189.html
Copyright © 2020-2023  润新知