本篇文章和上篇文章的Add不是同一个问题,从本次的这个题目中不仅能学会怎么解决这种题目,更重要的是他提供了一种怎样解决大数相加的方法。好了,废话不多说,上题目
question:
my thinking:
这个问题其实就是数字相加,从原理上来说就算我们手算再大的数字相加我们也是能算出来的(只要够细心,肯付出时间),而计算机是不能直接计算非常大的数的和的,因为我们知道计算机是有存储限制的,具体到编程语言,每个数据类型也是有其限制的,基本类型的long型占的字节数一般是最多的了吧,但是也只能是8个字节,也就是64位,64位最多能存储多大的数字呢,这里咱们就不算了,总之他是有上限的,所以要是要计算大数据之和,普通的直接相加肯定就不行了,所以这个题目给的方法也是计算大数之和的方法之一。
那么接下来介绍一下我解决这个问题的思路,一句话概括就是利用链表来模拟我们手算两数之和的过程。多了不解释,自己看能不能理解吧,上代码–>
my Answer:
c++
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
ListNode *head,*temp;
ListNode *head1=l1,*head2=l2;
int more10 = 0;
while(head1!=NULL && head2!=NULL){
int sum = head1->val + head2->val +more10;
if(sum>9){
more10 = 1;
sum = sum%10;
}else{
more10 = 0;
}
ListNode *newNode = new ListNode(sum);
if(head1 == l1){
head = newNode;
temp = head;
}else{
temp->next = newNode;
temp = newNode;
}
head1 = head1->next;
head2 = head2->next;
}
if(head1!=NULL || head2!=NULL){
ListNode *leave = head1==NULL?head2:head1;
while(leave!=NULL){
int sum = leave->val + more10;
if(sum>9){
sum = sum%10;
more10 = 1;
}else{
more10 = 0;
}
ListNode *newNode = new ListNode(sum);
temp->next = newNode;
temp = newNode;
leave = leave->next;
}
}
if(more10==0){
return head;
}else{
ListNode *newNode = new ListNode(1);
temp->next = newNode;
return head;
}
return head;
}
要是上官网做题的话,你会看到人家给出了ListNode这个结构体的成员,即:
c++
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
结果肯定是Accepted的了,不然我也不敢放上来,大家有好的方法希望能多交流
leetcode-Add Two Number
最新推荐文章于 2021-08-26 22:19:58 发布