力扣(LeetCode)415. 字符串相加
阿新 • • 發佈:2019-04-08
i++ array class stringbu charat etc bubuko 字符串加法 src
給定兩個字符串形式的非負整數 num1 和num2 ,計算它們的和。
註意:
num1 和num2 的長度都小於 5100.
num1 和num2 都只包含數字 0-9.
num1 和num2 都不包含任何前導零。
你不能使用任何內建 BigInteger 庫, 也不能直接將輸入的字符串轉換為整數形式。
java 基礎版
class Solution { public String addStrings(String num1, String num2) { String res = ""; int s1c = num1.length(); int s2c = num2.length(); if(s1c>=s2c) { int diff = s1c-s2c; String temp = ""; for(int i=0;i<diff;i++) { temp += "0"; } num2 = temp+num2; char[] cs1 = num1.toCharArray(); char[] cs2 = num2.toCharArray(); int flag=0; for(int i = cs1.length-1;i>=0;i--) { System.out.println((cs1[i]-48+cs2[i]-48+flag)); if(flag+cs1[i]-48+cs2[i]-48>=10) { res = (flag+cs1[i]-48+cs2[i]-48-10) + res; flag=1; }else { res = (flag+cs1[i]-48+cs2[i]-48) + res; flag=0; } } if(flag == 1 ) { res = 1+res; } }else { int diff = s2c-s1c; String temp = ""; for(int i=0;i<diff;i++) { temp += "0"; } num1 = temp+num1; char[] cs1 = num1.toCharArray(); char[] cs2 = num2.toCharArray(); int flag=0; for(int i = cs1.length-1;i>=0;i--) { System.out.println((cs1[i]-48+cs2[i]-48+flag)); if(flag+cs1[i]-48+cs2[i]-48>=10) { res = (flag+cs1[i]-48+cs2[i]-48-10) + res; flag=1; }else { res = (flag+cs1[i]-48+cs2[i]-48) + res; flag=0; } } if(flag == 1 ) { res = 1+res; } } return res; } }
java 升級版
字符串加法、鏈表加法、二進制加法 都可以如此做
class Solution { public String addStrings(String num1, String num2) { StringBuilder build = new StringBuilder(); int s1c = num1.length()-1; int s2c = num2.length()-1; int carry = 0; //進位 while(s1c>=0 || s2c>=0 || carry !=0) { if(s1c>=0) { carry += num1.charAt(s1c--)-'0'; } if(s2c>=0) { carry += num2.charAt(s2c--)-'0'; } build.append(carry%10); //各位數字 carry /=10; // 進位數字 } return build.reverse().toString(); } }
運行結果
力扣(LeetCode)415. 字符串相加