字符串相加

此博客链接: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;
        
    }
}

 

结果

 

 

 

posted @ 2020-11-20 22:55  萍2樱释  阅读(2116)  评论(2编辑  收藏  举报