leetcode第四题--Add Two Numbers
2024-10-16 19:18:06
Problem:
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
一开始就是想到先把第一个list转换成一个数,然后把第二个转换成第二个数,然后相加后,再把相加的值变成list。代码如下
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
int a = , b = , ans = , flag = ;
int index1 = , index2 = ;
ListNode *temp1, *temp2, *result;
temp1 = l1;
temp2 = l2;
while(temp1->next != NULL )
{
index1++;
a += (temp1 -> next -> val) * (int)pow(,index1);
}
while(temp2 -> next != NULL)
{
index2++;
b += temp2 ->next -> val * (int)pow(, index2);
}
ans = a + b;
result -> val = ans%;
result -> next = NULL;
flag = ans/;
while(flag)
{
ListNode *added = new ListNode(flag%10);
result ->next = added;
flag = flag/;
}
return result;
}
然后是Time Limit Exceed了。那就不能这样做,应该直接在链表相加。加到某个链表结束为止。要用中间变量记住当前的进位。如果最后进位不为零(也就是为1)的话,那还是需要记录的。代码贴出如下:
class Solution {
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2)
{
ListNode * ans = NULL, *last = NULL;
int up = ;
while (l1 != NULL && l2 != NULL)
{
int tmp = l1->val + l2->val + up;
up = tmp / ;
if (last == NULL)
{
ans = new ListNode(tmp % );
last = ans;
}
else
last = pushBack(last, tmp % );
l1 = l1->next;
l2 = l2->next;
}
while (l1 != NULL)
{
int tmp = l1->val + up;
last = pushBack(last, tmp % );
up = tmp / ;
l1 = l1->next;
}
while (l2 != NULL)
{
int tmp = l2->val + up;
last = pushBack(last, tmp % );
up = tmp / ;
l2 = l2->next;
}
if (up == )
{
ListNode * l = new ListNode(up);
last->next = l;
}
return ans;
} ListNode * pushBack(ListNode * last, int val)
{
ListNode * l = new ListNode(val);
last->next = l;
return l;
}
};
还是要感谢suool大神,改天一定要再做一次看看是不是真的掌握了。自己真的水平有限啊。不过只要肯努力,一天进步一点点就好。让cnblogs记录我的学习过程,come on!
最新文章
- 配置Entity Framework连接Sql Server出现的一个异常
- MSSQL 生成拼音码
- 动态修改 NodeJS 程序中的变量值
- 团体程序设计天梯赛-练习集L2-011. 玩转二叉树
- Android(java)学习笔记123:Clock app编写报错01
- KindEditor 修改多图片上传显示限制大小和张数
- 函数模板的载体-HPP
- Floodlight Controller 路线原则
- zabbix3.0.4 部署History
- CSS中浮动和定位对元素宽度/外边距/其他元素所占空间的影响
- How Many Sets I(容斥定理)
- FPGA学习笔记(四)——Verilog基本语法
- JavaScript如何计算两个日期间的时间差
- 浪里个浪 FZU - 2261
- POI操作Excel详解,读取xls和xlsx格式的文件
- macos 下安装virtualenv,virtualenvwrapper,然后在pycharm中正常配置方法日志
- Oracle取月份-不带前面的0
- MySQL 删除重复数据实例
- Linux内核分析 笔记四 系统调用的三个层次 ——by王玥
- 最小二乘法 及python 实现
热门文章
- STL源代码分析 集装箱 stl_set.h
- eclipse android ndk 提示Type 'JNIEnv' could not be resolved 等信息解决办法
- SAP RFC 函数来创建 Java呼叫 学习总结 一步一步的插图
- JMeter 怎么保存登录状态
- HDU ACM 1007 Quoit Design 分而治之的方法,最近点
- HTML文档中应用css样式的方法总结
- 最少换乘(Dijkstra)
- android activity 后的形式 藏
- 【Linux】Vim编辑器-批量注释与反注释
- 【翻译自mos文章】v$undostat视图没有依照每10分钟进行更新,v$undostat仅仅有1行(one rows)