LeetCode415-字符串相机(水题)
两个很大的字符串相加。
主要的问题是,怎么把每一位相加,然后进位处理。
因为是加法,进位只会多一位。
所有上述问题,只要把字符串倒转过来,每位相加,再放到stringbuilder里就好了。
比如123456+67,这种长度不一样的。
就是
654321+
76
6+7 = 3,进1
5+6+1=2 进1
4+1=5
最后就是
325321
倒转就是123523
如果其中有一个数加完了,就把这个数剩下的全append进去.
有可能循环之后,最后一位才是进位,要把最后的进位加上!
public class LeetCode415 { public static void main(String[] args) { System.out.println(addStrings("1","9")); } public static String addStrings(String num1, String num2) { StringBuilder sb = new StringBuilder(); int len1= num1.length()-1; int len2= num2.length()-1; //进位 int count = 0; //倒着相加,从后面遍历 while(0<=len1&&0<=len2){ char temp1 = num1.charAt(len1); char temp2 = num2.charAt(len2); int temp = ((int)temp1-48)+((int)temp2-48)+count; //用完之后设为0 count=0; if(temp>=10){ count=1; temp%=10; } sb.append((char)(temp+48)); len1--; len2--; } while (len1>=0){ char temp1 = num1.charAt(len1); int temp = ((int)temp1-48)+count; //用完之后设为0 count=0; if(temp>=10){ count=1; temp%=10; } sb.append((char)(temp+48)); len1--; } while (len2>=0){ char temp2 = num2.charAt(len2); int temp = ((int)temp2-48)+count; //用完之后设为0 count=0; if(temp>=10){ count=1; temp%=10; } sb.append((char)(temp+48)); len2--; } //有可能最后还有一个进位呢? if(count==1) sb.append('1'); String result = sb.reverse().toString(); return result; } }