Sunday, February 9, 2020

Leetcode 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.

非常简单的题目,先把两个string reverse,这样才可以从头加到尾是从低位到高位,用一个sum, next表示当前的和,以及进位。while loop 判断有没有超过最大的string长度,以及进位是不是还有值没有处理。加完以后,再reverse string就是答案了。另外,处理string to int时,别忘了 +- ‘0’。 


class Solution {
public:
    string addStrings(string num1, string num2) {
        reverse(num1.begin(), num1.end());
        reverse(num2.begin(), num2.end());
        int s1 = num1.size(), s2 = num2.size();
        int i = 0, next = 0, sum = 0;
        string res;
        while(i < max(s1, s2) || next != 0)
        {
            sum += next;
            sum += i < s1 ? num1[i] - '0' : 0;
            sum += i < s2 ? num2[i] - '0': 0;
            res += sum % 10 + '0';
            next = sum/10;
            sum = 0;
            i++;
        }
        reverse(res.begin(), res.end());
        return res;
    }
};

No comments:

Post a Comment

Leetcode 316. Remove Duplicate Letters

 这道题表面问的是如何删除重复,实际在问如何从多个字符选取一个保留,从而让整个字符串按升序排列。那么策略就是对于高顺位的字符比如‘a',就要选靠前位置的保留,而低顺位字符如’z'则应该尽量选取靠后位置保留。 算法大概思路:每看到一个字符,我们要决定是否保留 1. ...