当前位置:网站首页>Leetcode刷题——字符串相加相关题目(415. 字符串相加、面试题 02.05. 链表求和、2. 两数相加)
Leetcode刷题——字符串相加相关题目(415. 字符串相加、面试题 02.05. 链表求和、2. 两数相加)
2022-08-02 19:23:00 【lonelyMangoo】
概述
这三道题都是字符串相加相关的,后面的是链表,本质还是字符串相加。
415. 字符串相加
想看看题目
字符串相加
这道题是我上次面试遇到的,是简单题,但是面试官不让我debug,而且写的时候出现了好几个问题也没发现,步骤冗余等等,所以现在做一下总结。
这道题本质上就是一位一位相加,然后进位。
先看看我面试时候写的
public String addStrings(String num1, String num2) {
int pre=0;
//表示当前位的数
// int now = 0;
StringBuilder res = new StringBuilder();
int len1 =num1.length()-1;
int len2 = num2.length()-1;
while (len1>=0 && len2>=0){
Integer sNum1 = new Integer(num1.substring(len1, len1 + 1));
Integer sNum2 = new Integer(num2.substring(len2, len2 + 1));
int tpsum = sNum1+sNum2+pre;
pre=tpsum/10;
tpsum=tpsum%10;
res.append(tpsum);
len1--;
len2--;
}
while (len1>=0){
Integer sNum1 = new Integer(num1.substring(len1, len1 + 1));
int tpsum = sNum1+pre;
pre =tpsum/10;
tpsum=tpsum%10;
res.append(tpsum);
len1--;
}
while (len2>=0){
Integer sNum2 = new Integer(num2.substring(len2, len2 + 1));
int tpsum = sNum2+pre;
pre =tpsum/10;
tpsum=tpsum%10;
res.append(tpsum);
len2--;
}
if(pre == 1){
res.append(pre);
}
return res.reverse().toString();
}
当时出现了好几个问题
- while里面忘记len忘记大于等于0了,当时没看出来
- 当时有一段是复制的,1、2没改
- 有很多冗余的变量,压根可以不需要
- 三个while可以合并成一个,代码冗余太严重
- 获取单个元素方法效率很差
改进之后的代码:
public String addStrings(String num1, String num2) {
int pre = 0;
StringBuilder sb = new StringBuilder();
int len1 = num1.length()-1;
int len2 = num2.length()-1;
int sum;
while (len1>=0 || len2>=0){
sum=0;
if(len1>=0){
sum += num1.charAt(len1)-'0';
len1--;
}
if(len2>=0){
sum += num2.charAt(len2)-'0';
len2--;
}
sum+=pre;
pre=sum/10;
sum=sum%10;
sb.append(sum);
}
if(pre == 1){
sb.append(1);
}
return sb.reverse().toString();
}
这里最后一个判断是因为最后一次的进位没有计算。
链表相加
除了是链表以外,都是一样的。
结尾用一个新链表尾插法进行
代码:
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int pre= 0;
//使用头插法
ListNode listNode = new ListNode(0);
ListNode res = listNode;
int sum;
while (l1!=null || l2!=null){
sum=0;
if(l1!=null){
sum+=l1.val;
l1=l1.next;
}
if(l2!=null){
sum+=l2.val;
l2=l2.next;
}
sum+=pre;
pre =sum/10;
sum=sum%10;
ListNode tp = new ListNode(sum);
// tp.next=listNode.next;
// listNode.next=tp;
listNode.next=tp;
listNode=listNode.next;
}
if(pre == 1){
ListNode tp = new ListNode(1);
listNode.next=tp;
// tp.next=listNode.next;
// listNode.next=tp;
}
return res.next;
}
边栏推荐
- 健康报告-设计与实现
- spack install reports an error /tmp/ccBDQNaB.s: Assembler message:
- 解析Collection接口中的常用的被实现子类重写的方法
- You want the metagenomics - microbiome knowledge in all the (2022.8)
- Compose主题切换——让你的APP也能一键换肤
- Brain-computer interface 003 | Musk said that he has realized a virtual self-dialogue with the cloud, and related concept shares have risen sharply
- es 官方诊断工具
- Geoserver + mysql + openlayers problem
- 如何ES源码中添加一个自己的API 流程梳理
- idea 配置resin
猜你喜欢
脑机接口003 | 马斯克称已实现与云端的虚拟自己对话,相关概念股份大涨
openlayers不常用接口介绍
7.25 - 每日一题 - 408
斯堪尼亚SCANIA OTL标签介绍
快速掌握jmeter(一)——实现自动登录与动态变量
Brain-computer interface 003 | Musk said that he has realized a virtual self-dialogue with the cloud, and related concept shares have risen sharply
openlayers version update difference
光源控制器接口定义说明
牛客题目——滑动窗口的最大值、矩阵最长递增路径、顺时针旋转矩阵、接雨水问题
解析Collection接口中的常用的被实现子类重写的方法
随机推荐
ABAP语法小复习
es 读流程源码解析
ssh configuration
Kali命令ifconfig报错command not found
Lvm逻辑卷
You want the metagenomics - microbiome knowledge in all the (2022.8)
Unity 打包和切换平台|Build Settings窗口介绍
扫码预约 | 观看Apache Linkis数据处理实践以及计算治理能力
服务器Centos7 静默安装Oracle Database 12.2
【C语言刷题】Leetcode238——除自身以外数组的乘积
ssh配置
What is a Field Service Management System (FSM)?what is the benefit?
golang刷leetcode 经典(10) tire树与ac自动机
分布式事务
我靠这套笔记自学,拿下字节50万offer....
Based on OpenGL glaciers and firebird (illumination calculation model, visual, particle system)
当TIME_WAIT状态的TCP正常挥手,收到SYN后…
什么是现场服务管理系统(FSM)?有什么好处?
【LeetCode】1161. 最大层内元素和
golang刷leetcode 数学(1) 丑数系列