(java)leetcode415 字符串相加(两个整数保存成字符串的形式,对它们求和)(Add String)

题目描述:

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

注意:

  1. num1 和num2 的长度都小于 5100.
  2. num1 和num2 都只包含数字 0-9.
  3. num1 和num2 都不包含任何前导零。
  4. 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。

解题思路:

题目明确要求不能将字符串转成int,不然这题毫无意义。解题思路和二进制的字符串相加一模一样,挨个取出数字相加,逢10进1,不够位补0参与计算。

代码实现(java):

class Solution {
    public String addStrings(String num1, String num2) {
        StringBuilder sb=new StringBuilder();
        //表示向前进一位
        int pre=0;
        
        while(num1.length()!=num2.length()){
            if(num1.length()>num2.length())
                num2="0"+num2;
            else
                num1="0"+num1;
        }
        
        char[] c1 = num1.toCharArray(); 
        char[] c2 = num2.toCharArray(); 
        
        for(int i=num1.length()-1;i>=0;i--){
            int m=c1[i]-'0';
            int n=c2[i]-'0';
            int temp=m+n+pre;
            if(temp>=10){
                sb.append(temp-10);
                pre=1;                
            }
            else{
                sb.append(temp);
                pre=0;
            }    
        }
        
        if(pre==1)
            sb.append('1');
        
        return sb.reverse().toString();
    }
}

补充:这个代码提交后的运行速度位32ms,后来我找了排名靠前的代码,提交后,发现速度也没有排名中那么好,不知道他这个是怎么回事,而且相同的代码提交两次也会有不同。

你可能感兴趣的:(Java,算法,leetcode解题记录)