一天一大 leet(字符串相加)难度:简单-Day20200803
时间:2022-07-25
本文章向大家介绍一天一大 leet(字符串相加)难度:简单-Day20200803,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目:
给定两个字符串形式的非负整数 num1 和 num2 ,计算它们的和。
注意:
- num1 和 num2 的长度都小于 5100.
- num1 和 num2 都只包含数字 0-9.
- num1 和 num2 都不包含任何前导零。
- 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
抛砖引玉
思路
- 模拟加法运算,逐位相加大于 10 则进位
解法
- num1 与 num2 位数不同时是在字符串最前面用 0 补位
- 逐位相加的和:wei
- 组成:num1[i] + num2[j]+jin(上一位和的进位)
- wei%10 本轮相加保留在该位的数
- wen%10 本轮相加进位的数
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var addStrings = function (num1, num2) {
let len1 = num1.length,
len2 = num2.length,
jin = 0, // 进位
wei = 0, // 本位相加的和
bu = '',
result = ''
// 用0对较小字符串补位
for (let i = 1; i <= Math.abs(len1 - len2); i++) {
bu = bu + '0'
}
len1 > len2 ? (num2 = bu + num2) : (num1 = bu + num1)
// 逐位相加 -> 从低位到高位
for (let i = Math.max(len1, len2) - 1; i >= 0; i--) {
// 本位相加的和
wei =
(parseInt(num1.charAt(i), 10) || 0) +
(parseInt(num2.charAt(i), 10) || 0) +
parseInt(jin, 10)
// 更新结果
result = parseInt(wei % 10, 10).toString() + result
// 保留进位
jin = wei >= 10 ? parseInt(wei / 10, 10) : 0
}
// 逐位相加完成还剩余进位则直接拼接到结果上
return jin > 0 ? jin.toString() + result.toString() : result.toString()
}
上面方法为了完成逐位相加的逻辑对字符串进行了补位 可以使用记录索引即位置来避免真实操作字符串
- num1[i]+num2[j]+jin
- i、j 从高位递减
- 当 i 或 j 小于 0 时 num1[i]或 num2[j]为 0
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var addStrings = function (num1, num2) {
let i = num1.length - 1,
j = num2.length - 1,
jin = 0,
wei = 0,
result = ''
while (i >= 0 || j >= 0 || jin != 0) {
const x = i >= 0 ? num1.charAt(i) - '0' : 0
const y = j >= 0 ? num2.charAt(j) - '0' : 0
wei = x + y + jin
result = (wei % 10).toString() + result
jin = parseInt(wei / 10, 10)
i -= 1
j -= 1
}
return result
}
- CSS3魔法堂:说说Multi-column Layout
- 数据可视化-EChart2.0使用总结2
- rpc框架之 thrift 学习 2 - 基本概念
- rpc框架之avro 学习 1 - hello world
- 探讨Android中的内置浏览器和Chrome
- java并发编程学习: 阻塞队列 使用 及 实现原理
- CSS魔法堂:说说Float那个被埋没的志向
- Netbeans配置Xdebug
- rpc框架: thrift/avro/protobuf 之maven插件生成java类
- WebComponent魔法堂:深究Custom Element 之 从过去看现在
- 数据可视化-EChart2.0使用总结1
- JavaScript事件概览
- gradle项目与maven项目相互转化
- rpc框架之gRPC 学习 - hello world
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 前端工程师不可不知的Nginx知识
- Django1.11 简单登录注册
- 基因表达聚类分析之初探SOM - 自组织特征图
- JMH - Java 代码性能测试的终极利器、必须掌握
- 从零搭建Spring Boot脚手架(6):整合Redis作为缓存
- 换一种姿势挖掘CORS漏洞
- 新的Spring OAuth2.0 授权服务器项目正式发布
- spring boot整合apollo
- 枚举和List的几个共有方法
- AtomicInteger源码解析
- AtomicIntegerArray源码解析
- AtomicIntegerFieldUpdater源码解析
- “终于懂了” 系列:Android屏幕刷新机制—VSync、Choreographer 全面理解!
- 一些PHP选项参数相关的函数
- 【Flutter 专题】98 易忽略的【小而巧】的技术点汇总 (六)