欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode【1--两数之和】 LeetCode【2--两数相加】

程序员文章站 2022-07-15 08:25:54
...

两数之和

题目描述

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
LeetCode【1--两数之和】 LeetCode【2--两数相加】

解题思路

直接两重循环遍历,无脑

代码实现

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int>res;
        for(int i = 0; i<nums.size();++i)
        {
            for(int j = i+1;j<nums.size();++j)
            {
                if(nums[i]+nums[j] == target)
                {
                    res.push_back(i);
                    res.push_back(j);
                }
            }
        }
        return res;
    }
};

两数相加

题目描述

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
LeetCode【1--两数之和】 LeetCode【2--两数相加】

解题思路

输出结果是链表的逆序,所以只需要把两个链表每位上的数字相加为新链表的一个结点,不断的挂链即可。

代码实现

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* newHead = new ListNode(-1); //新链表
        ListNode* Cur = newHead;
        int sum = 0; //每一位上面的和
        bool carry = false; //进位标志
        while(l1!=NULL || l2!=NULL)
        {
            sum = 0;
            if(l1!=NULL)
            {
                sum+=l1->val;
                l1=l1->next;
            }
            if(l2!=NULL)
            {
                sum+=l2->val;
                l2= l2->next;
            }
            if(carry)
            {
                sum+=1;
            }
            Cur -> next = new ListNode(sum%10);
            carry = sum>=10? true:false;
            Cur = Cur->next;
            
        }
        if(carry)
        {
            Cur->next = new ListNode(1);
        }
        //没有头节点,返回头结点的下一个结点
        return newHead->next;
    }
};
相关标签: 一些题