zoukankan      html  css  js  c++  java
  • LeetCode 415. 字符串相加

    题目链接

    415. 字符串相加

    题目分析

    这个题是个简单题,但是代码的写法可以有很多种。最基本的就是双指针同步去进行各位相加,然后用新的循环把多出来的那个数的剩余部分计算完。
    这样写的话代码会比较复杂,我们可以把这里合成一个循环,直到所有条件都不符合了才结束,这里所说的条件是以下三个

    • 字符串1长度结束
    • 字符串2长度结束
    • 进位为0

    这样写的话代码会精简非常非常多。

    代码实现

    实现一

    class Solution {
        public String addStrings(String num1, String num2) {
            int sum = 0;
            char[] str1 = num1.toCharArray();
            char[] str2 = num2.toCharArray();
            int i = str1.length - 1;
            int j = str2.length - 1;
            int count = 0;
            StringBuffer sb = new StringBuffer();
            while(i >= 0 && j >= 0){
                sb.append((((str1[i] - '0' + str2[j] - '0')) + count) % 10);
                if((str1[i] - '0' + str2[j] - '0' + count) >= 10){
                    count = 1;
                }else{
                    count = 0;
                }
                i--;
                j--;
            }
            while(i >= 0){
                sb.append((str1[i] - '0' + count) % 10);
                if(str1[i] - '0' + count >= 10){
                    count = 1;
                }else{
                    count = 0;
                }
                i--;
            }
            while(j >= 0){
                sb.append((str2[j] - '0' + count) % 10);
                if(str2[j] - '0' + count >= 10){
                    count = 1;
                }else{
                    count = 0;
                }
                j--;
            }
            if(count == 1){
                sb.append('1');
            }
            return sb.reverse().toString();
        }
    }
    

    实现二

    class Solution {
        public String addStrings(String num1, String num2) {
            StringBuilder sb = new StringBuilder();
            int carry = 0, i = num1.length()-1, j = num2.length()-1;
            while(i >= 0 || j >= 0 || carry != 0){
                if(i>=0) carry += num1.charAt(i--)-'0';
                if(j>=0) carry += num2.charAt(j--)-'0';
                sb.append(carry%10);
                carry /= 10;
            }
            return sb.reverse().toString();
        }
    }
    
  • 相关阅读:
    序列化二叉树
    把二叉树打印成多行
    按之字形打印数据
    对称的二叉树
    二叉树的下一个结点
    删除链表中重复的结点
    c语言中数组名a和&a详细介绍
    C语言输出格式
    回文素数
    求平均成绩
  • 原文地址:https://www.cnblogs.com/ZJPaang/p/13424484.html
Copyright © 2011-2022 走看看