Day 1

第一题:

给定一个整数数组 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;

  返回结果。

原文地址:https://www.cnblogs.com/liang-yi-/p/13109500.html