Leetcode 01 02题解

@Leetcode 01 02 题解

Leetcode 01 02 题解

很久没有更博了,从今天开始争取每天在LeetCode刷两道题,两年时间正好做完毕业。加油!

01 两数之和

难度:简单
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum

题解:暴力算法,双层循环,j 从 i + 1 开始,保证同一个元素不会使用两遍。

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

02 两数相加

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

示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers

题解:可以直接从链表头往链表尾两两相加。设置一个变量表示进位,若最后一位仍有进位,记得增加一位。主要回顾链表的使用。

/**
 * 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* p = new ListNode();
        ListNode* l = p;
        int t = 0;
        while(l1 || l2 || t != 0) {
            ListNode *node = new ListNode();
            node->val = t;
            if (l1) {
                node->val += l1->val;
                l1 = l1->next;
            }
            if (l2) {
                node->val += l2->val;
                l2 = l2->next;
            }
            t = node->val / 10;
            node->val %= 10;    
            l->next = node;
            l = l->next;
        }
        return p->next;
    }
};
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页