415. Add Strings

Given two non-negative numbers 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.

解法一:Language-Java Time-O(max(num1,num2)) Space-O(1) Run Time-55ms

public class Solution {
     public String addStrings(String num1, String num2) {
        String res = "";
        int count = 0;
        int num = 0;

        if(num1.length() < num2.length())
        {
           return addStrings(num2, num1);
        }else {
            for(int i = num2.length() - 1; i >= 0; i --)
            {
                if(count == 1)
                {
                    num += 1;
                }
                num += (num2.charAt(i) - '0') + (num1.charAt(i + num1.length() - num2.length()) - '0');
                if(num >= 10)
                {
                    count = 1;
                    num = num - 10;
                }else
                {
                    count = 0;
                }
                res = String.valueOf(num) + res;
                num = 0;
            }
            for(int i = num1.length() - num2.length() - 1; i >= 0; i --)
            {
                if(count == 1)
                {
                    num += 1;
                }
                num += num1.charAt(i) - '0';
                if(num >= 10)
                {
                    count = 1;
                    num = num - 10;
                }else
                {
                    count = 0;
                }
                res = String.valueOf(num) + res;
                num = 0;
            }
            if(count == 1)
            {
                res = "1" + res;
            }
            return res;
        }  
    }
}

解法二:Language-Java Time-O(max(num1,num2)+(max(num1,num2)-min(num1,num2))) Space-O(num1 + num2) Run Time-26ms

public class Solution {
   public String addStrings(String num1, String num2) {
        if(num1.length() > num2.length())
        {
            return addStrings(num2, num1);
        }else
        {
            int count = 0;
            StringBuffer res = new StringBuffer();
            StringBuffer ns1 = new StringBuffer(num1);
            StringBuffer ns2 = new StringBuffer(num2);
            //反转字符串
            ns1.reverse();
            ns2.reverse();
            int len = ns2.length() - ns1.length();
            for(int k = 0; k < len; k ++)
            {
                ns1.append('0');
            }
            for(int i = 0; i < ns2.length(); i ++)
            {
                int num = 0;
                if(count == 1)
                {
                    num += 1;
                }
                num += (ns1.charAt(i) - '0') + (ns2.charAt(i) - '0');
                if(num >= 10)
                {
                    res.append(num - 10);
                    count = 1;
                }else
                {
                    res.append(num);
                    count = 0;
                }
            }
            if(count == 1)
            {
                res.append("1");
            }
            return res.reverse().toString();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值