您的位置:首页 > 其它

leetcode-Add Two Number

2015-03-09 14:31 351 查看
本篇文章和上篇文章的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的了,不然我也不敢放上来,大家有好的方法希望能多交流
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: