0 总结
考察数组,没有什么好的办法,存粹就是暴力的解法,但是前提是要逆序一下,这样就好了很多,不逆序的话可以在短的前面补0也是一样的。但是硬用字符数组的话要判断谁先结束的问题,于是可以巧妙地转化成整型数组,整型数组默认值是0,0加上任何数不产生什么其他特殊意义,所以我们就不用判断谁先结束谁后结束了。至于要不要多+1,整上了也行,不弄的话要在最后一位判断,反正就算是最后一位相加有进位,那个进位肯定是1.
1 自己写的一版(通过)
public String solve(String s,String t){ String str1=s; String str2=t; int len=str2.length(); if(str1.length()>str2.length()){ len=str1.length(); } char [] a1=new StringBuffer(str1).reverse().toString().toCharArray(); char [] a2=new StringBuffer(str2).reverse().toString().toCharArray(); char [] res=new char[len]; char [] tmp=null; int mode=0; for(int i=0;i<len;i++){ if(i<a1.length && i<a2.length){ tmp=plus(a1[i],a2[i],mode); }else if(i>a2.length-1 && i<a1.length){ tmp=plus(a1[i],mode); }else if(i>a1.length-1 && i<a2.length){ tmp=plus(a2[i],mode); } mode=isHasCarry(res,tmp,i); } StringBuffer resSb=new StringBuffer(String.valueOf(res)); if(mode==1){ resSb.append("1"); } return resSb.reverse().toString(); } public int isHasCarry(char [] res ,char [] tmp,int index){ int mode=0; if(tmp.length>1){ mode=1; res[index]=tmp[1]; }else{ res[index]=tmp[0]; } return mode ; } public char[] plus(char a,char b,int mode ){ int numa=a-'0'; int numb=b-'0'; int res=numa+numb; if(mode!=0){ res+=1; } return new StringBuffer().append(res).toString().toCharArray(); } public char[] plus(char a ,int mode){ int numa=a-'0'; int res=numa; if(mode==1){ res+=1; } return new StringBuffer().append(res).toString().toCharArray(); }
2 漫画算法的思路改版(未测试)
public String solve(String s,String t ){ int maxLength=s.length()>t.length()?s.length():t.length(); int [] arrt=new int [maxLength+1]; int [] arrs=new int [maxLength+1]; int [] carry=new int[maxLength+1]; int [] res=new int[maxLength+1]; for(int i=s.length()-1;i>=0;i--){ arrs[s.length()-1-i]=s.charAt(i)-'0'; } for(int i=t.length()-1;i>=0;i--){ arrt[t.length()-1-i]=t.charAt(i)-'0'; } carry[0]=0; for(int i=0;i<maxLength+1;i++){ int tmp=arrs[i]+arrt[i]+carry[i-1]; if(tmp>=10){ res[i]=tmp-10; carry[i]=1; }else{ res[i]=tmp; carry[i]=0; } } StringBuffer sb=new StringBuffer(); for(int i=maxLength;i>=0;i++){ if(res[i]==0){ continue; }else{ sb.append(res[i]+""); } } return sb.toString(); }