首页 > 代码库 > 刷了两道题

刷了两道题

leetcode上的Two Sum和Add Two Numbers.

twoSum给出的问题是,给定一个整数数组和一个整数,求其中的哪两个元素的和等于给定的那个整数,并返回这两个元素的索引。

我的思路是,进行两层循环,从数组第一个元素开始,分别与它后面的元素相加,这样就能保证遍历完成时,数组中任意两个数都相加过。然后将和等于给定整数的两个元素的索引返回成一个vector<int>。

addNum给出的问题是,给定两个链表,分别倒序表示两个整数,比如2->4->3,和5->6->4,表示的是342和465。如何得出一个链表,等于这两个链表代表整数的值。

我的思路是,首先建立和的链表的首节点,并设置一个链表的指针控制变量。然后设置一个循环,当所创建链表为空链表时停止循环。按照链表遍历的顺序,两个数相加是从个位数相加。

在遍历过程中还要保证两个数字位数不同的情况,以及两个位数相同的数字相加后变成多位数的情况。此时使用?:计算符就可以更方便的去控制变量。

整个循环过程是这样控制的:

如果该位数和大于10,则将该位数值减去10后重新存储。并设置一个变量t=1;如果不大于10,则t=0;

控制加数链表l1,l2,如果链表为空,则让它指向空指针,如果本身不为空,则指向下一个元素。

进行创建和链表的下一位数。

如果l1,l2有一个不为空,二者为空,但是t不等于0,则说明还有下一位数。

然后创建下一位的元素sumNode=(l1?l1->val:0)+(l2?l1->val:0)+t;

意思是说,如果加数改为为空,代表此处数值为0。t代表进位+1。

刷了两道题