415. Add Strings

问题描述:实现两个由0~9数字组成的String加和,两个String长度小于5100且不以零开头。不可以使用BigInteger 类库,不可以将字符转换为数字。
思路:既然不能用原生方法,那就用老办法,将数字从末尾开始一位一位加和计算。
原答案:

    public static String addStrings(String num1, String num2) {
        char[] num1Char=num1.toCharArray();
        char[] num2Char=num2.toCharArray();
        StringBuffer sb=new StringBuffer();
        int add=0;
        int i=0;
        int []record=new int[Math.max(num1Char.length, num2Char.length)];
        for(;i<num1Char.length&&i<num2Char.length;i++){
            int sum=(int)num1Char[num1Char.length-i-1]+(int)num2Char[num2Char.length-i-1]+add-96;
            add=sum/10;
            record[i]=sum%10;
        }
        if(i<num2Char.length){
            for(;i<num2Char.length;i++){
                int sum=num2Char[num2Char.length-i-1]+add-48;
                add=sum/10;
                record[i]=sum%10;
            }
        }else if(i<num1Char.length){
            for(;i<num1Char.length;i++){
                int sum=num1Char[num1Char.length-i-1]+add-48;
                add=sum/10;
                record[i]=sum%10;
            }
        }
        if(add!=0)
            sb.append(add);
        for(i=record.length-1;i>=0;i--) {
        	sb.append(record[i]);
        }
        return sb.toString();
    }

最佳答案:

    public String addStrings(String num1, String num2) {
         if(num1 == null || num2 == null) return num1 == null ? num2 : num1;
        if(num1.isEmpty() || num2.isEmpty()) return num1.isEmpty() ? num2 : num1;
        
        if(num1.length() < num2.length())
            return helper(num2,num1);
        return helper(num1,num2);
    }
    public String helper(String num1,String num2){
        char[]ch1 = num1.toCharArray();
        char[]ch2 = num2.toCharArray();
        int i1 = num1.length();
        int i2 = num2.length();
        int carry = 0;
      
        while(i2 >0){
           int temp  = ch1[--i1]-'0' + ch2[--i2]-'0' + carry;
            carry = temp / 10;
           ch1[i1] = (char)(temp % 10 + '0');
        }
        while(carry != 0 && i1 > 0){
            int temp = ch1[--i1]-'0' + carry;
            carry = temp / 10;
            ch1[i1] = (char)(temp%10 + '0');
        }
        return carry > 0 ?  (char)(carry + '0')+ new String(ch1) : new String(ch1);
    }

思路是一致的,但是最佳答案中判别了两个字符串长度,从而加快后续的拼接处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值