1.
给定一个整数数组nums和一个整数目标值target请你在该数组中找出和为目标值target的那两个整数,
并返回它们的数组下标
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
思路:
#include <stdio.h>
#include <stdlib.h>
int* twoSum(int *nums, int numsSize, int target,int *returnSize)
{
int left = 0;
int right = numsSize - 1;
while (right > 0)
{
for (int i = 0; i < right; i++)
{
if (nums[i] + nums[right] == target)
{
int *data = (int*)malloc(sizeof(int)* 2);
data[0] = i;
data[1] = right;
*returnSize = 2;
return data;
}
}
--right;
}
return NULL;
}
int main()
{
int nums[] = { 2, 7, 11, 5 };
int size = sizeof(nums) / sizeof(nums[0]);
int target = 9;
int *data = twoSum(nums, 4, target);
if (data != NULL)
{
printf("[%d,%d]\n", data[0], data[1]);
}
else
{
printf("不存在!\n");
}
free(data);
system("pause");
return 0;
}
2.
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字
请你将两个数相加,并以相同形式返回一个表示和的链表
你可以假设除了数字 0 之外,这两个数都不会以 0 开头
struct ListNode
{
int val;
struct ListNode *next;
};
struct ListNode* BuyNode()
{
struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));
if (node == NULL)
{
exit(1);
}
return node;
}
struct ListNode* addTwoNumbers(struct ListNode* L1, struct ListNode* L2)
{
struct ListNode* p1 = L1;
struct ListNode* p2 = L2;
struct ListNode* newnode = NULL;
struct ListNode* L3 = BuyNode(); //头结点
struct ListNode* p3 = L3;
p3->next = NULL;
int tmp = 0; //缓存进位
while (p1 != NULL || p2 != NULL) //当L1和L2同时为空,各个数位相加完成
{
newnode = BuyNode();
p3->next = newnode; //L3连接新节点
p3 = p3->next; //p3指向新节点
p3->next = NULL;
if (p1 == NULL&&p2 != NULL) //L1空,L2不空 例:10+1000
{
p3->val = (p2->val+tmp) % 10; //进位后的余数
tmp = (p2->val + tmp) / 10; //保留进位
p2 = p2->next; //指向L2的下一个结点
}
else if (p1 != NULL && p2 == NULL) //L1不空,L2空 例:1000+10
{
p3->val = (p1->val + tmp) % 10;
tmp = (p1->val + tmp) / 10;
p1 = p1->next; //指向L1的下一个结点
}
else
{
p3->val = (p1->val + p2->val + tmp) % 10;
tmp = (p1->val + p2->val + tmp) / 10;
p1 = p1->next; //指向L1的下一个结点
p2 = p2->next; //指向L2的下一个结点
}
}
//tmp==1时,存在最高位进位
if (tmp == 1)
{
newnode = BuyNode();
//退出循环时,p3->L3的最后一个结点
p3->next = newnode;
p3 = p3->next;
p3->val = 1;
p3->next = NULL;
}
return L3->next; //返回第一个数据结点
}
图解:
总结一下:
第一次刷力扣,不熟悉这种刷题模式,出错找不到错误在哪儿,审题不清,细节处理不到位,我的我的,下次继续加油!