第一题:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
(来源:力扣(LeetCode))
1、一开始也只能想到这种双循环求解的方法,一开始写出来的代码没有截图。
对指针开辟空间的语法不记得,后改正:int *result = (int *)malloc(sizeof(int)*2);
题目要求方法最后返回数组下标,之前不知道怎么返回多个数组下标,在参考了几个题解之后,发现可以船舰一个新的数组(result)来接收所求得的数组下标,最终返回该数组。
系统提供的数组参数是{2,7,11,15},target=9;
运行上面的代码可以得出预期结果;
2、Java中有Map<k,v>集合可存储键值对,键值对则正好对应了数组里面的数据和下标;
先创建一个HashMap集合,泛型都为Integer;
for循环,查看HashMap集合其中是否有和数组数据相同的键,若没有,则将(target-数组数据)和下标分别存入集合中;
如果发现有键于数组数据相同,则将键对应的值和数组下标存入index数组中,将其返回;
第二题:
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
(来源:力扣(LeetCode))
1、定义链表元素:struct ListNode *p,*q;
为链表元素分配内存空间:struct ListNode *r=(struct ListNode*)malloc(sizeof(struct ListNode));
(15行)因为struct ListNode结构体内定义了next指针,所以当为指针分配了空间后需要将该指针的next指向NULL;
用x,y来接收当前p,q指针所指向的数,用num接收x和y相加的值;
由于两个非负数相加可能超过十,所以使用flag接收num/10作为进位的标志;
再为r->next分配内存空间使r->val=num%10;
当p,q指向的位置运算结束后,p和q都指向其next;
最终循环结束,再次判断flag是否为0,不是则最高位有进位,需再为r->next分配空间是r->next->val=1;
返回结果。