【每日一题】415. 字符串相加【String】

在这里插入图片描述
一开始的思路是采用小学时候算术时采用的竖式计算法,上下相加大于等于10就需要向前进一位,原来是打算用数学方法拼接每一位的和然后再转字符串,但是看上去行不通,于是采用了StringBuilder的方法。
StringBuilder的append方法是后插,但是使用public StringBuilder insert(int offset, char c)就可以达到前插的效果,前插时offset为0。
写到此处,已经可以完成num1与num2位数相同时候的操作。

public static String addStrings(String num1, String num2){
        int i = num1.length()-1;
        int j = num2.length()-1;
        int flag = 0;
        StringBuilder sb = new StringBuilder();
        while (i >= 0 && j >= 0){
            int x = num1.charAt(i) - '0';
            int y = num2.charAt(j) - '0';
            sb.insert(0,(x+y) % 10 + flag );
            if (x + y >= 10){
                flag = 1;
            }
            else{
                flag = 0;
            }
            i--;
            j--;
        }
        return sb.toString();

    }
}

这是修改后的第二版,没有通过的测试用例是num1 = 584,num2 = 18,会得出5102的答案,问题出在了sb.insert(0,(x+y) % 10 + flag );这句上,如果x+y=9同时要进位的话,会insert10而不是0

    public static String addStrings(String num1, String num2){
        int i = num1.length()-1;
        int j = num2.length()-1;
        int flag = 0;
        StringBuilder sb = new StringBuilder();
        while (i >= 0 || j >= 0){
            int x = i < 0 ? 0 : num1.charAt(i) - '0';
            int y = j < 0 ? 0 : num2.charAt(j) - '0';
            sb.insert(0,(x+y) % 10 + flag );
            if (x + y >= 10){
                flag = 1;
            }
            else{
                flag = 0;
            }
            i --;
            j --;
        }
        if (i == j & flag == 1){
            sb.insert(0,1 );
        }
        return sb.toString();
    }

修改后:

public static String addStrings(String num1, String num2){
        int i = num1.length()-1;
        int j = num2.length()-1;
        int flag = 0;
        StringBuilder sb = new StringBuilder();
        while (i >= 0 || j >= 0){
            int x = i < 0 ? 0 : num1.charAt(i) - '0';
            int y = j < 0 ? 0 : num2.charAt(j) - '0';
            sb.insert(0,(x + y + flag) % 10 );
            if (x + y + flag >= 10){
                flag = 1;
            }
            else{
                flag = 0;
            }
            i --;
            j --;
        }
        if (i == j & flag == 1){
            sb.insert(0,1 );
        }
        return sb.toString();
    }

但是这次又有了新的问题,没通过测试用例num1 = 99,num2 = 9,输出是08,问题出在了if (i == j & flag == 1)上,改成(flag == 1)就行了, 跟i是否和j相等没有任何关系,修改后就得到了一个通过啦

public static String addStrings(String num1, String num2){
        int i = num1.length()-1;
        int j = num2.length()-1;
        int flag = 0;
        StringBuilder sb = new StringBuilder();
        while (i >= 0 || j >= 0){
            int x = i < 0 ? 0 : num1.charAt(i) - '0';
            int y = j < 0 ? 0 : num2.charAt(j) - '0';
            sb.insert(0,(x + y + flag) % 10 );
            if (x + y + flag >= 10){
                flag = 1;
            }
            else{
                flag = 0;
            }
            i --;
            j --;
        }
        if (flag == 1){
            sb.insert(0,1 );
        }
        return sb.toString();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值