刷了两道题
Posted 冥地魔王
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷了两道题相关的知识,希望对你有一定的参考价值。
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。
以上是关于刷了两道题的主要内容,如果未能解决你的问题,请参考以下文章