1. 程式人生 > >(java)leetcode415 字串相加(兩個整數儲存成字串的形式,對它們求和)(Add String)

(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,後來我找了排名靠前的程式碼,提交後,發現速度也沒有排名中那麼好,不知道他這個是怎麼回事,而且相同的程式碼提交兩次也會有不同。