415. 字符串相加

题意:
  • 用两个字符串表示两个数
  • 求出其相加的结果
  • 不能使用任何内建 BigInteger 库
  • 不能直接将输入的字符串转换为整数形式
思路:
  • 翻转字符串,将其转为字符数组,即从下标0开始依次表示数的个位、十位、百位…
  • while循环外初始化一个add变量来记录进位数,StringBuilder来添加每次循环时每位数字运算完后的结果
  • 执行while循环的最后一个条件必须是add != 0,保证数的最后一位运算完后仍有进位时能继续执行循环进行运算后添加到StringBuilder中
  • 建立x, y 变量,结合三目运算符用来处理字符数组越界的情况
  • 每次循环每位数字的运算公式:num = x + y + add (对位数字相加后再加上前一位计算结果的加数)
  • StringBuilder每次只添加num % 10(num进位后的结果,num<10的话是其本身)
  • 计算加数:num/10
class Solution {public static String addStrings(String num1, String num2) {StringBuilder ans = new StringBuilder();// p1指向num1尾部,p2指向num2尾部int p1 = 0, p2 = 0;// 进位数int add = 0;// 字符串翻转后转为字符数组char[] c1 = new StringBuilder(num1).reverse().toString().toCharArray();char[] c2 = new StringBuilder(num2).reverse().toString().toCharArray();while (p1 < num1.length() || p2 < num2.length() || add != 0) {// 只要指针越界了数字就当作0int x = p1 < num1.length() ? c1[p1] - '0' : 0;int y = p2 < num2.length() ? c2[p2] - '0' : 0;int num = x + y + add;ans.append(num % 10);add = num / 10;p1++;p2++;}return ans.reverse().toString();}
}
收获
  • 对字符串表示的数进行逢十进一的处理:

    1. 翻转字符串,将其转为字符数组,即从下标0开始依次表示数的个位、十位、百位…
    2. while循环外初始化一个add变量来记录进位数,StringBuilder来添加每次循环时每位数字运算完后的结果
    3. 执行while循环的最后一个条件必须是add != 0,保证数的最后一位运算完后仍有进位时能继续执行循环进行运算后添加到StringBuilder中
    4. 建立x, y 变量,结合三目运算符用来处理字符数组越界的情况
    5. 每次循环每位数字的运算公式:num = x + y + add (对位数字相加后再加上前一位计算结果的加数)
    6. StringBuilder每次只添加num % 10(num进位后的结果,num<10的话是其本身)
    7. 计算加数:num/10
  • while和逻辑或||结合:两个指针都扫描完其所在范围的数组后才停止循环

  • char类型中只有`0`~`9`的字符,对应的编码为48 ~ 57,如果想把字符的数字内容提取提取出来为int,可以用相应字符减去`0`对应的偏移量即为int类型数字

LeetCode 415. 字符串相加 (逢十进一模版字符处理)相关推荐

  1. Leetcode 415. 字符串相加

    难度:简单 频率:119 题目: 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回. 你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也 ...

  2. leetcode 415. 字符串相加(Java版)

    题目 https://leetcode-cn.com/problems/add-strings/ 题解 代码 /*** 给定两个字符串形式的非负整数 num1 和 num2 ,计算它们的和.*/ pu ...

  3. LeetCode 415. 字符串相加(大数加法)

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

  4. Leetcode 415. 字符串相加 (每日一题 20210826 同类型题)

    给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和.提示:num1 和num2 的长度都小于 5100 num1 和num2 都只包含数字 0-9 num1 和num2 都不包含任何前 ...

  5. LeetCode 415.字符串相加

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

  6. 2022-3-31 Leetcode 415.字符串相加

    最终版,难度不大,魔鬼细节 class Solution {public:string addStrings(string num1, string num2) {reverse(num1.begin ...

  7. 天枰称重 (枚举法|进制转换逢十进一模版)

    题意: 方法1(枚举法) 思路: 先找到所有小于1000000的3的幂的数:[1, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049, 177147, ...

  8. 【LeetCode笔记】415. 字符串相加(Java、字符串)

    题目描述 不能直接把字符串转换成整数(会溢出) 面试被问过,今天刷面经又刷到..那就索性水一篇文吧! 更新:原题就是 leetcode 415 思路 & 代码 只要理好字符串s.字符串t.答案 ...

  9. Leetcode 387. 字符串中的第一个唯一字符

    387. 字符串中的第一个唯一字符 给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 .如果不存在,则返回 -1 . 示例 1: 输入: s = "leetcode&quo ...

最新文章

  1. ITS智能交通监控系统技术解析
  2. 三、数据预处理——处理分类型数据:编码与哑变量
  3. Java多线程学习三十:ThreadLocal 适合用在哪些实际生产的场景中
  4. java 正负随机_如何产生一个随机的[0, n)范围内的Short值
  5. WayOs扩展WAN口工具1.4隆重发布,同时发布BCM内置三天智能重启超级终端调试图...
  6. Codeforces 464E. The Classic Problem
  7. python 表格处理项目该如何分工_python 处理 Excel 表格
  8. windows10桌面图标异常,显示为白色图标
  9. jq 截取字符串后四位
  10. MicroPython中I2C模块的设计与实现(1) - machine_i2c框架的机制
  11. 老子研究文献知识发现数据竞赛
  12. js 伪造referer_详解php伪造Referer请求反盗链资源
  13. Tesseract训练新字体
  14. JAVA JDBC连接步骤代码,SQL注入,处理异常try catch 的快捷键
  15. ⼩程序(微信)【面试】
  16. 直接建内网穿透服务器替换TeamViewer和向日葵可以实现远程操控
  17. Ruby on Rails 之旅(七)—— Ruby on Rails 入门(5)
  18. 使用超临界二氧化碳进行精密表面清洁
  19. 搞钱不再是第一要务(转载)
  20. 计算机毕业设计Java宠物医院管理系统(源码+系统+mysql数据库+lw文档

热门文章

  1. 5.3 Date类型
  2. (转)OAuth 2.0的设计思路
  3. apache---httpd.conf详解
  4. 【GitHub】提交新项目、更新已有的项目
  5. 【jQuery笔记Part1】08-jQuery操作css-获取设置样式
  6. Windows域策略设置 IE信任站点【全域策略生效】
  7. powershell自动化操作AD域、Exchange邮箱系列(8)—链接操作Sqlserver数据库
  8. windows netstat taskkill命令 操作进程
  9. linux shell 常用参数 $? $# 等等解析
  10. win10安装oracle11g 服务端及配置详解