当前位置:网站首页>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;
}
边栏推荐
- [安洵杯 2019]easy_web
- 当TIME_WAIT状态的TCP正常挥手,收到SYN后…
- Nature Microbiology综述:聚焦藻际--浮游植物和细菌互作的生态界面
- 让你的应用完美适配平板
- 动态生成不同类型的订单,请问如何存放到Mongodb数据库?
- Redis 5 种数据结构及对应使用场景
- ShardingSphere-proxy +PostgreSQL实现读写分离(静态策略)
- Metaverse 001 | Can't control your emotions?The Metaverse is here to help you
- 银保监会:人身险产品信披材料应由保险公司总公司统一负责管理
- 连续三次 | 灵雀云入选Gartner中国ICT技术成熟度曲线报告
猜你喜欢
随机推荐
Office2021 安装MathType
Nature Microbiology综述:聚焦藻际--浮游植物和细菌互作的生态界面
Fetch 请求不转换BLOB正常显示GBK编码的数据
7.24 - 每日一题 - 408
MySQL安装时一直卡在starting server
研发了 5 年的时序数据库,到底要解决什么问题?
脑机接口003 | 马斯克称已实现与云端的虚拟自己对话,相关概念股份大涨
【OpenNI2】资料整理 -- 不断更新中
NC | 土壤微生物组的结构和功能揭示全球湿地N2O释放
当TIME_WAIT状态的TCP正常挥手,收到SYN后…
Metaverse 001 | Can't control your emotions?The Metaverse is here to help you
MaxCompute 的SQL 引擎参数化视图具体有哪些增强功能?
golang刷leetcode 经典(12) 完全二叉树插入器
spack install报错/tmp/ccBDQNaB.s: Assembler message:
B站HR对面试者声称其核心用户都是生活中的Loser
【LeetCode】1374. 生成每种字符都是奇数个的字符串
[安洵杯 2019]easy_web
【软件工程导论】软件工程导论笔记
【LeetCode】622. 设计循环队列
Electron使用指南之初体验