• 415. Add Strings


    题目:

    Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and num2.

    Note:

    1. The length of both num1 and num2 is < 5100.
    2. Both num1 and num2 contains only digits 0-9.
    3. Both num1 and num2 does not contain any leading zero.
    4. You must not use any built-in BigInteger library or convert the inputs to integer directly.

    链接:https://leetcode.com/problems/add-strings/#/description

    3/24/2017

    没有想到这道题会提交这么多次不成功。

    问题:

    1. i, j的初始值不要越界

    2. int -> char, char -> int的互换。Character.toInteger(char)是没有的,int - '0'没有问题,但是((a + b + c) % 10) + '0'想得到char是不行的。(char)((a + b + c) % 10)返回的是unicode?比如"0", "0"返回结果是"u0000"而不是"0"。这个过程碰到的问题太多,至少有4,5个问题,需要解决。

    3. 每一步算sum和c的顺序,注意算c在后面,不要用当前值把低位的进位覆盖。

     1 public class Solution {
     2     public String addStrings(String num1, String num2) {
     3         StringBuilder sum = new StringBuilder();
     4         int a, b, c = 0;
     5         int s = 0;
     6         int i = num1.length() - 1;
     7         int j = num2.length() - 1;
     8 
     9         for (; i >= 0 && j >= 0; i--, j--) {
    10             a = num1.charAt(i) - '0';
    11             b = num2.charAt(j) - '0';
    12             sum.append(Character.forDigit((a + b + c) % 10, 10));
    13             if (c + a + b >= 10) c = 1;
    14             else c = 0;
    15         }
    16         for (; i >= 0; i--) {
    17             a = num1.charAt(i) - '0';
    18             sum.append(Character.forDigit((a + c) % 10, 10));
    19             if (c + a >= 10) c = 1;
    20             else c = 0;
    21         }
    22         for (; j >= 0; j--) {
    23             b = num2.charAt(j) - '0';
    24             sum.append(Character.forDigit((b + c) % 10, 10));
    25             if (c + b >= 10) c = 1;
    26             else c = 0;
    27         }
    28         if (c == 1) sum.append('1');
    29         return sum.reverse().toString();
    30     }
    31 }

    别人的精简算法:注意第8行,这都可以?简直奇妙!同时只用了一个循环,类似的题目很多,希望自己也能记住。

     1 public class Solution {
     2     public String addStrings(String num1, String num2) {
     3         StringBuilder sb = new StringBuilder();
     4         int carry = 0;
     5         for(int i = num1.length() - 1, j = num2.length() - 1; i >= 0 || j >= 0 || carry == 1; i--, j--){
     6             int x = i < 0 ? 0 : num1.charAt(i) - '0';
     7             int y = j < 0 ? 0 : num2.charAt(j) - '0';
     8             sb.append((x + y + carry) % 10);
     9             carry = (x + y + carry) / 10;
    10         }
    11         return sb.reverse().toString();
    12     }
    13 }

    其他讨论:https://discuss.leetcode.com/category/543/add-strings

  • 相关阅读:
    转载 如何去掉超链接文字下的下划线
    Fedora 15安装 VirtualBox 4.1
    庆祝开通!
    Delphi直接读写XML修改版
    Perforce的资料一点也没查到
    AxWebBrowser的Navigate2方法写参数的偷懒方法
    腾讯2012实习生面试
    如何让div在IE6下自适应
    PhpStorm修改字体
    监听url
  • 原文地址:https://www.cnblogs.com/panini/p/6615322.html
Copyright © 2020-2023  润新知