滴滴笔试算法题 两个数字字符串相加

滴滴笔试算法题 两个数字字符串相加

题目释义:给定两个字符串s1、s2,字符串都是由0-9数字组成,需要将s1数字与s2数字进行相加,并返回相加后的数据结果s3。要求不能使用Integer.parseInt() BigDecimal等操作,字符长度使用Integer可能溢出。(难度:简单)

测试用例1:s1 = “123”, s2 = “234”,计算结果s3 = “357”

测试用例2:s1 = “998”, s2 = “12”,计算返回结果s3 = “1010”

代码如下,仅供学习,有更好的解法可以相互学习

public class AddStrNums {

    public String addNums(String s1, String s2) {
        StringBuffer result = new StringBuffer();
        String ss1 = new StringBuffer(s1).reverse().toString();
        String ss2 = new StringBuffer(s2).reverse().toString();

        int len1 = ss1.length();
        int len2 = ss2.length();
        int maxLen = Math.max(len1, len2);

        // 记录每一次对位数相加
        int tempNum = 0;
        // 标记是否有进位
        int overFlow = 0;
        for (int i = 0; i < maxLen; i++) {
            // 下标小于s1、s2,由于charAt获取的字符是ASCII码,对应要减去0的ASCII的值
            if (i < len1 && i < len2) {
                tempNum = ss1.charAt(i) - '0' + ss2.charAt(i) - '0' + overFlow;
            }
            // 下标小于s1,但超过s2
            if (i < len1 && i >= len2) {
                tempNum = ss1.charAt(i) - '0' + overFlow;
            }
            // 下标小于s2,但超过s1
            if (i >= len1 && i < len2) {
                tempNum = ss2.charAt(i) - '0' + overFlow;
            }
            // 对位相加是否有进位
            if (tempNum >= 10) {
                // 进位设置为1,两个数相加最多是1
                overFlow = 1;
                // 记录当前位需要保存的数据
                tempNum = tempNum % 10;
            } else {
                // 没有产生进位,进位数重置为0
                overFlow = 0;
            }
            // 添加每次数据
            result.append(tempNum);
        }
        // 如果相加数据长度都超过了s1、s2,则将进位数据补充在最后
        if (overFlow != 0) {
            result.append(overFlow);
        }
        // 最后对数据做翻转
        return result.reverse().toString();
    }

    @Test
    public void testAddCase() {
        String s1 = "998";
        String s2 = "12";
        System.out.println(s1 + "+" + s2 + "=" + addNums(s1, s2));
    }
}

你可能感兴趣的:(个人总结记录,字符串,算法,leetcode)