力扣(LeetCode)415. 字符串相加

给定两个字符串形式的非负整数 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();
    }
}

运行结果

posted @ 2019-04-08 16:01  lick  阅读(285)  评论(0编辑  收藏  举报