415_Add_Strings 字符串相加

2020-01-15  本文已影响0人  lazy_ccccat

题目描述

https://leetcode-cn.com/problems/add-strings/

解法

解法1:我的解法

class Solution {
public:
    string addStrings(string num1, string num2) {
        string res;
        int i = num1.size() - 1;
        int j = num2.size() - 1;
        int carry = 0;
        for (; i >= 0 && j >= 0; i--, j--) {
            int sum = (num1[i] - '0') + (num2[j] - '0') + carry;
            int val = sum % 10;
            carry = sum / 10;
            //res.insert(size_t(0), size_t(1), val + '0');
            res.insert(res.begin(), val + '0');
        }
        int index;
        string left;
        if (i >= 0) {
            index = i;
            left = num1;
        } else {
            index = j;
            left = num2;
        }
        while (index >= 0) {
            int sum = left[index] - '0' + carry;
            int val = sum % 10;
            carry = sum / 10;
            //res.insert(size_t(0), size_t(1), val + '0');
            res.insert(res.begin(), val + '0');
            index--;
        }
        if (carry) {
            //res.insert(size_t(0), size_t(1), carry + '0');
            res.insert(res.begin(), carry + '0');
        }
        return res;
    }
};

没啥好说的,就是模拟手工加法,但是写的太长了,啰嗦。一会贴一个别人写的简洁版本。
另外 res.insert(0, 1, carry + '0'); 不知道为啥突然编译不过了,说call to member function 'insert' is ambiguous。加了size_t()就好了。
然后参考了别人的提交,res.insert(res.begin(), carry + '0'); 这么写也可以,以后用这个重载版本吧。

解法2:简洁

思路一样,就是写法简洁,体会一下。用或,缺少的就补0.

class Solution {
public:
    string addStrings(string num1, string num2) {
       int i = num1.size() - 1;
       int j = num2.size() - 1;
       string res;
       int carry = 0;
       while (i >= 0 || j >= 0) {
           int a = (i >= 0) ? num1[i--] - '0' : 0;
           int b = (j >= 0) ? num2[j--] - '0' : 0;
           int sum = a + b + carry;
           int val = sum % 10;
           carry = sum / 10;
           res.insert(res.begin(), val + '0');
       }
       return carry ? "1" + res : res;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读