• 字符串相加


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

    结果

     

    出来混总是要还的
  • 相关阅读:
    最近这段时间我,想在2008 的基础上,写2011 有的工具 不知道会样,这次又机会研究ploy
    Screen 可以查找屏幕pos系类的函数
    笔记1
    Ubuntu下如何安装 tar.bz2 文件
    安装ubuntu遇到“BusyBox”问题
    android luancher 如何添加快捷方式
    转 Android 源代码结构
    修改apk图标
    Linux Ubuntu 下如何安装 .SH文件
    解放你的电源键!!不用刷机不用装软件!超简单修改搜索锁屏、HOME键唤醒~~~~~
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/14013442.html
Copyright © 2020-2023  润新知