给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

注意:

①num1 和num2 的长度都小于 5100.
②num1 和num2 都只包含数字 0-9.
③num1 和num2 都不包含任何前导零。
④你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。

结题思路:

首先,String类型只有运算符重载的‘+’   ,用于拼接字符串的简化操作, 不支持常规的四则运算

但是Char类型可以进行加减乘除的运算,可以想到将String中的每个字符转换为char类型进行计算

算法流程:

  首先确定num1与num2的长度L,因为③num1 和num2 都不包含任何前导零,题目明显暗示我们短的字符串需要前导补0

  需要两个变量,temp来储存 num1与num2 的char值相加的结果 ,res来储存是否有进位,进位则加一

  结果需要存回字符串,由于先从末位开始计算,存进去的字符串需要逆序。

public String addStrings(String num1, String num2) {
int L = num1.length() >= num2.length() ? num1.length() : num2.length();
String s="";
if (num1.length()<L) {
for (int i=0;i<L-num1.length();i++)
s = s + '0';
num1 = s+num1;
}
if (num2.length()<L) {
for (int i=0;i<L-num2.length();i++)
s = s + '0';
num2 = s+num2;
}
StringBuffer save = new StringBuffer();
boolean res = false;
for (int i = L - 1; i >= 0; i--) {
int n1 = num1.charAt(i)-'0';
int n2 = num2.charAt(i)-'0';
int temp = res?n1+n2+1:n1+n2;
if (temp>=10) {
res=true;
}else res=false;
save.append(temp%10);
}
if (res) save.append(1);
return save.reverse().toString();
}

耗时很长,参考了一下Krahets的解法,思路是一致的,使用双指针进行解答

    public String addStrings(String num1, String num2) {
StringBuilder res = new StringBuilder("");
int i = num1.length() - 1, j = num2.length() - 1, carry = 0;
while(i >= 0 || j >= 0){
int n1 = i >= 0 ? num1.charAt(i) - '0' : 0;
int n2 = j >= 0 ? num2.charAt(j) - '0' : 0;
int tmp = n1 + n2 + carry;
carry = tmp / 10;
res.append(tmp % 10);
i--; j--;
}
if(carry == 1) res.append(1);
return res.reverse().toString();
}

Leetcode_415字符串相加的更多相关文章

  1. T-SQL字符串相加之后被截断的那点事

    本文出处:http://www.cnblogs.com/wy123/p/6217772.html 字符串自身相加, 虽然赋值给了varchar(max)类型的变量,在某些特殊情况下仍然会被“截断”,这 ...

  2. C语言关于利用sscanf实现字符串相加减

    #include<stdio.h>#include<string.h>void main(){ int a; int b; char str1[10] = "9999 ...

  3. 【转】String字符串相加的问题

    String字符串相加的问题 前几天同事跟我说我之前写的代码中在操作字符串时候,使用字符串相加的方式而不是使用StringBuffer或者StringBuilder导致内存开销很大.这个问题一直在困扰 ...

  4. String 字符串相加比较

    String 字符串相加 对比 public static void main(String[] args) { String a = "helloword"; final Str ...

  5. 代码题(59)— 字符串相加、字符串相乘、打印最大n位数

    1.415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 思路:和链表相加类似,求进位. class Solution { public: string addS ...

  6. LeetCode:字符串相加【415】

    LeetCode:字符串相加[415] 题目描述 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 注意: num1 和num2 的长度都小于 5100.num1 和num2 都只 ...

  7. String字符串相加的原理

    因为String是非常常用的类, jvm对其进行了优化, jdk7之前jvm维护了很多的字符串常量在方法去的常量池中, jdk后常量池迁移到了堆中 方法区是一个运行时JVM管理的内存区域,是一个线程共 ...

  8. Java实现 LeetCode 415 字符串相加

    415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 注意: num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num ...

  9. [LeetCode]415. 字符串相加、43. 字符串相乘

    题目 415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 题解 维护一个temp表示当前两数相加+上一个进位的和. 每次更新结果的一位. 注意终止条件. 最后将 ...

随机推荐

  1. How to show out three rows from the same databand On A4?

    How to show out three rows from the same databand On A4? Quote Post by DoraHuang » Tue Mar 13, 2018 ...

  2. CSS中让背景图片居中且不平铺

    background:url(../images/logo.jpg) no-repeat center ;

  3. VB - 变量

    Cbool函数将变量转换成布尔值: Cbyte函数将变量转换为0到255之间的整数. Ccur函数.Cdbl函数和Csng函数将变量转换为浮点数值,前者只精确到小数点后四位,后两者要更加精确,数值的范 ...

  4. 关于html 修改滚动条的问题

    之前项目需要改变滚动条的样式 一.修改原生样式 原文地址:https://blog.csdn.net/zh_rey/article/details/72473284 问题在于无法兼容火狐与ie等浏览器 ...

  5. ret/retn人为改变执行地址

    1.CALL和RET/RETN是一对指令,CALL把返回地址压入堆栈,RET/RETN把返回地址从堆栈取出,然后将IP寄存器改为该返回地址.  2.不使用CALL,而是人为地把地址放入堆栈即可实现.如 ...

  6. Comet OJ - Contest #12

    B 整个表格其实是一些联通块,取反操作不能跨连通块.所以直接统计一下每个连通块内数字不对的个数是不是偶数即可 #include<iostream> #include<cstring& ...

  7. java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation getting while running test project?

    转摘:http://stackoverflow.com/questions/11155340/java-lang-illegalaccesserror-class-ref-in-pre-verifie ...

  8. VIM编辑器使用及插件配置

    1.VIM的三种模式: 普通模式.插入模式.命令行模式2.三种模式的转换: 2.1进入普通模式 ①打开VIM默认为普通模式 ②处于插入模式/命令行模式时,按ESC进入普通模式 2.2进入插入模式: A ...

  9. queue队列消费者生产者测试

    from multiprocessing import JoinableQueue from threading import Thread def worker(q): while True: tr ...

  10. 查看java进程内存简单示例

    分析工具 1.jps 显示指定系统内的所有JVM进程 2.jstat 收集JVM各方面的运行数据 3.jinfo  显示JVM配置信息 4.jmap  堆快照 5.jhat  分析headdump文件 ...