【 LeetCode 算法】Add Strings 字符串相加

文章目录

  • Add Strings 字符串相加
    • 问题描述:
    • 分析
    • 代码
    • Tag

Add Strings 字符串相加

问题描述:

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式 。

1 < = n u m 1. l e n g t h , n u m 2. l e n g t h < = 1 0 4 n u m 1 和 n u m 2 都只包含数字 0 − 9 n u m 1 和 n u m 2 都不包含任何前导零 1 <= num1.length, num2.length <= 10^4\\ num1 和num2 都只包含数字 0-9\\ num1 和num2 都不包含任何前导零 1<=num1.length,num2.length<=104num1num2都只包含数字09num1num2都不包含任何前导零

分析

这是一个典型的大数处理。数位长度已经无法使用64位表示,并且长度最大 1 0 4 10^4 104,所以需要通过模拟处理。

与之前的链表相加类似,低位对齐,然后计算加和,注意进位。

代码

public String addStrings(String num1, String num2) {
        int len1= num1.length(),len2= num2.length();
        int p1= len1-1,p2 = len2-1,carry =0 ;
        char[] ans = new char[Math.max(len1,len2)];
        int idx = ans.length-1;
        while(p1>=0||p2>=0||carry>0){
            int a = carry;
            if(p1>=0){
                a+=num1.charAt(p1)-'0';
                p1--;
            }
            if(p2>=0){
                a+=num2.charAt(p2)-'0';
                p2--;
            }
            carry = a/10; 
            if(idx<0){
                return 1+new String(ans);
            }   
            ans[idx] = (char)(a%10+'0');       
            idx--;
        }
        String s = new String(ans);
        return s;
    }

时间复杂度 O ( N ) O(N) O(N)

空间复杂度 O ( N ) O(N) O(N)

Tag

Math

String

你可能感兴趣的:(数据结构与算法,算法)