字符串相加


此博客鏈接:https://www.cnblogs.com/ping2yingshi/p/14013442.html

字符串相加

題目鏈接:https://leetcode-cn.com/problems/add-strings/

題目

給定兩個字符串形式的非負整數 num1 和num2 ,計算它們的和。

提示:

num1 和num2 的長度都小於 5100
num1 和num2 都只包含數字 0-9
num1 和num2 都不包含任何前導零
你不能使用任何內建 BigInteger 庫, 也不能直接將輸入的字符串轉換為整數形式

題解

       思路:此題不讓用現成的能使用的庫或者整數相加,那么應該是,就使用字符串相加,去除每個字符串中的每個字符,變成數字后相加,這里需要注意到進位以及字符串相加時,應該是從后向前相加。

       方法:

                 1.先把字符串變成字符數組。

                 2.取兩個字符數組中的字符相加,相加時需要注意是否有進位。

                 3.相加的和存到一個字符串中。

                  4.把字符串翻轉即為結果。

注意

這里需要注意的是,在取兩個字符串相加時,首先需要判斷哪個字符串段,先相加到斷字符串的長度,然后把剩余字符串添加到后的后面。當添加剩余字符串時,也需要判斷最后一次相加的結果是否大於10。

問題

一直沒有找到怎么定義字符數組。

代碼

 以下代碼字符數組哪里報錯,但是我找了好久都沒有找到怎么定義字符數組。

 

 

class Solution {
    public String addStrings(String num1, String num2) {
       int len1=num1.length();
       int len2=num2.length();
       char str1[len1];
       char str2[len2];
       for(int i=0;i<len1;i++)
           str1[i]=num1.charAt(i);
       for(int j=0;j<len1;j++)
           str1[j]=num2.charAt(j);  
        int temp=0;//進位
        int len3=len1<=len2?len1:len2;
        String sum;
        for(int i=len1-1;i>=0;i--)
        {
            sum.concat(String.valueOf(str1[i]+str2[j]+temp));
            temp=(str1[i]+str2[j])>10?1:0;
        }
        //剩余字符串
        if(len1<len2)
        {
            if(temp==1)
            {
               sum.concat(String.valueOf(str2[len1]+temp));
            }
            else
            {
                 sum.concat(String.valueOf(str2[len1])) ;
            }
           for(int i=len1+1;i<len2-len1;i++)
           {
               sum.concat(String.valueOf(str2[i])) ;
           }
        }
        else{
            if(temp==1)
            {
               sum.concat(String.valueOf(str1[len1]+temp));
            }
            else
            {
                 sum.concat(String.valueOf(str1[len1])) ;
            }
           for(int i=len2+1;i<len1-len2;i++)
           {
               sum.concat(String.valueOf(str1[i])) ;
           }
        }
        //翻轉字符串
        int len3=sum.length();
        char str3[len3];
        for(int i=0;i<len3;i++)
        {
            str3[i]=str3.charAt(i);
        }
        for(int j=0;j<len3/2;j++)
        {
            char temp;
            temp=str3[j];
            str3[j]=str3[len3-j-1];
            str3[len3-j-1]=temp;
        }
        String str="";
        for(int i=0;i<len3;i++)
        {
            str+=str3;
        }
        return str;
        
    }
}

 重做題目

說明

思路還是上面的思路,只是代碼格式寫的不太一樣,但是還是報錯。。。。。。

代碼

class Solution {
    public String addStrings(String num1, String num2) {
       int len1=num1.length();
       int len2=num2.length();
       char[] str1=new char [len1];
       char[] str2=new char [len2];
       for(int i=0;i<len1;i++)
           str1[i]=num1.charAt(i);
       for(int j=0;j<len1;j++)
           str2[j]=num2.charAt(j);  
        int temp=0;//進位
        int len3=len1<=len2?len1:len2;
        String sum="";
        int k=len1-1;
        int p=len2-1;
        while(k>=0||p>=0||temp!=0)
            sum=sum.concat(String.valueOf((str1[k]+0)+(str2[p]+0)+temp));
            temp=(str1[i]+str2[i])>10?1:0;
            k--;
            p--;
        }
        //翻轉字符串
        char[] str3=sum.toCharArray();
        // for(int i=0;i<len4;i++)
        // {
        //     str3[i]=sum.charAt(i);
        // }
        int len4=str3.length;
        int len5=len4/2;
        for(int m=0;m<len4;m++)
        {
            char tem;
            tem=str3[m];
            str3[m]=str3[len4-m-1];
            str3[len4-m-1]=tem;
        }
        String str="";
        for(int n=0;n<len5;n++)
        {
            str+=str3[n];
        }
        // return sum.reverse().toString();//對字符串反轉
        return str;
        
    }
}

結果

 重新修改代碼

class Solution {
    public String addStrings(String num1, String num2) {
       int len1=num1.length();
       int len2=num2.length();
       char[] str1=new char [len1];
       char[] str2=new char [len2];
       for(int i=0;i<len1;i++)
           str1[i]=num1.charAt(i);
       for(int j=0;j<len2;j++)
           str2[j]=num2.charAt(j);  
        int temp=0;//進位
        //int len3=len1<=len2?len1:len2;
        String sum= "";
        int k=len1-1;
        int p=len2-1;
        int top = 0;
        int bottom = 0;
        while(k>=0||p>=0||temp!=0){
            //if(k>=0&&p>=0)
            {
                if(k>=0){
                    top = (str1[k] - '0');
                }else{
                    top = 0;
                }
                if(p>=0){
                    bottom = (str2[p] - '0');
                }else{
                    bottom = 0;
                }
                int t= top + bottom + temp;
                // System.out.println("top:"+top);
                // System.out.println("bottom:"+bottom);
                // System.out.println("t:"+t);
                  sum=sum.concat(String.valueOf( t%10 ));
                //  //sum.add(t%10);
                //  System.out.println("sum:"+sum);
                 temp=Integer.valueOf(t)>=10?1:0;
                 k--;
                 p--;
            }
            /*
            if(p>=0&&k<0)
            {
                sum=sum.concat(String.valueOf((str2[p]+0)+temp));
                temp=0;
                p--;
            }
             if(k>=0&&p<0)
            {
                sum=sum.concat(String.valueOf((str1[k]+0)+temp));
                temp=0;
                k--;
            }
            */
            
        }
        //翻轉字符串
         char[] str3=sum.toCharArray();
        // for(int i=0;i<len4;i++)
        // {
        //     str3[i]=sum.charAt(i);
        // }
        int len5=str3.length;
        int len4=len5;
        
        for(int m=0;m<len5/2;m++)
        {
            char tem;
            tem=str3[m];
            str3[m]=str3[len4-m-1];
            str3[len4-m-1]=tem;
        }
        
        String str="";
        for(int n=0;n<len5;n++)
        {
            str+=str3[n];
        }
        // return sum.reverse().toString();//對字符串反轉
        return str;
        
    }
}

 

結果

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM