2020-04-08(415. 字符串相加*)

难度 简单
这是一道简单的题,但是实现过程很容易繁琐。最开始考虑相加成int最后转换为String,然而发现越界了,还是要在String的基础上相加连接。
第一次:第一次实现的非常繁琐,既绕效率也不高。
执行用时 :15 ms, 在所有 Java 提交中击败了10.85%的用户
内存消耗 :39.7 MB, 在所有 Java 提交中击败了5.45%的用户

public String addStrings(String num1, String num2) {
        if(num1.length() < num2.length()){
            String temp = num1;
            num1 = num2;
            num2 = temp;
        }
        int d = num1.length() - num2.length();
        int carryFlag = 0;
        String result = "";
        for(int i = num1.length() - 1; i >= 0; i--){
            int a = num1.charAt(i);
            int b = 48;
            if(i-d >= 0 && i-d < num2.length()){
                b = num2.charAt(i-d);
            }
            int sum = a+b+carryFlag-96;
            if(sum >= 10){
                carryFlag = 1;
                result = (sum-10) + result;
            }else{
                carryFlag = 0;
                result = sum + result;
            }
        }
        if(carryFlag == 1){
            result = "1" + result;
        }
        return result;
    }

第二次:改善了算法,代码简洁了很多,但是效率提高不大
执行用时 :13 ms, 在所有 Java 提交中击败了13.27%的用户
内存消耗 :40 MB, 在所有 Java 提交中击败了5.45%的用户

public String addStrings(String num1, String num2) {
        int i = num1.length()-1;
        int j = num2.length()-1;
        String result = "";
        int carry = 0;
        while(i >= 0 || j >= 0){
            int a = i >= 0 ? num1.charAt(i)-'0' : 0;
            int b = j >= 0 ? num2.charAt(j)-'0' : 0;
            int sum = a + b + carry;
            carry = sum/10 > 0 ? 1 : 0;
            result = sum%10 + result;
            i--;
            j--;
        }
        if(carry == 1){
            result = "1" + result;
        }
        return result;
    }

第三次:改用StringBuilder代替String做连接处理。效率提高了不少,虽然不是理想状态但是就到这里吧,过度优化浪费时间不是一件好事。
执行用时 :3 ms, 在所有 Java 提交中击败了79.70%的用户
内存消耗 :40 MB, 在所有 Java 提交中击败了5.45%的用户

    public String addStrings(String num1, String num2) {
        int i = num1.length()-1;
        int j = num2.length()-1;
        StringBuilder result = new StringBuilder("");
        int carry = 0;
        while(i >= 0 || j >= 0){
            int a = i >= 0 ? num1.charAt(i)-'0' : 0;
            int b = j >= 0 ? num2.charAt(j)-'0' : 0;
            int sum = a + b + carry;
            carry = sum/10 > 0 ? 1 : 0;
            result.append(sum%10);
            i--;
            j--;
        }
        if(carry == 1){
            result.append(carry);
        }
        return result.reverse().toString();
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容