1、两数之和等于目标值(两次不能取同一个数)
classSolution {
public:
//声明返回值类型:vector<int>以及传入参数:nums、target ;vector<int> res; 声明返回参数
vector<int> twoSum(vector<int>&nums, int target) {
for(int i=0;i<nums.size();i++) // 循环第一个数
{
for(int j=i+1;j<nums.size();j++) // 循环第二个数,i+1防止重复,效率更高
{
if(nums[i]+nums[j]==target) //判断是否符合条件
{
res.push_back(i); //向返回参数内写入返回值
res.push_back(j); //向返回参数内写入返回值
return res; //返回返回参数值
}
}
}
return res; //返回返回参数值(必须有)
}
};
2、两数相加
classSolution {
public:
ListNode*addTwoNumbers(ListNode*l1, ListNode*l2) { //定义返回参数类型以及传入参数
ListNode* head = new ListNode(0);
ListNode* tail = head;
int carry = 0; //进位部分
int reminds = 0; // 余数部分
int val1 = 0; //链表1的值
int val2 = 0; //链表2的值
int sums = 0; //链表1的值+链表2的值+进位部分
while (l1 != nullptr || l2 != nullptr || carry != 0) { //链表不为空或有进位即循环
val1 = l1 ? l1->val : 0; //取链表1的值
val2 = l2 ? l2->val : 0; //取链表2的值
sums = val1 + val2 + carry; //取链表1的值+链表2的值+进位部分
carry = sums / 10; // 进位部分
reminds = sums % 10; //余数部分
tail->next = newListNode(reminds); //给尾部赋值
tail = tail->next; //给尾部添加新的节点
if (l1 != nullptr) {
l1 = l1->next; //依次获取l1的下一个节点的值
}
if (l2 != nullptr) {
l2 = l2->next; //依次获取l2的下一个节点的值
}
}
ListNode* result = head->next; //返回真正的头节点
delete head; // 释放初始化的节点内存
return result; //返回计算结果
}
};