乐趣区

关于算法:leetCode第一题和第二题两数之和两数相加

1.leetCode 第一题

需要:
https://leetcode-cn.com/probl…
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。
输出:nums = [2,7,11,15], target = 9
输入:[0,1]
解释:因为 nums[0] + nums[1] == 9,返回 [0, 1]。

  let nums = [2, 7, 11, 15];
  function print(nums, target) {
   // 创立映射表
    let hash = {};
    for (let i = 0; i < nums.length; i++) {// 将每次循环的数据存储起来 例如索引为 0 ={2:0}
      hash[nums[i]] = i;
     // 应用减法来寻找映射表中是否存在对应的值  这里是 9 - 7 成立 = 2 映射表中存在键为 2 的属性而它对应的值正是索引
      if (hash[target - nums[i]] != undefined) {
     // 将寻找到的 2 和以后被减的索引 return 进来就满足了本题的后果
        return [hash[target - nums[i]], i];
      }
    }
  }

2.leetCode 第二题

需要:
https://leetcode-cn.com/probl…
给你两个非空的链表,示意两个非负的整数。它们每位数字都是依照逆序的形式存储的,并且每个节点只能存储一位数字。
输出:l1 = [2,4,3], l2 = [5,6,4]
输入:[7,0,8]
解释:342 + 465 = 807.

/* 
输出:l1 = [2,4,3], l2 = [5,6,4]
输入:[7,0,8]
解释:342 + 465 = 807.
*/
  // 实现一个创立节点的类
  function ListNode(val) {
    this.val = val;
    this.next = null;
  }
  var addTwoNumbers = function (l1, l2) {
    // 链表的头
    var node = new ListNode("head");
    // 这里的 cur 相似一个针 计算完 l1.val+l2.val 之后 向下指
    var cur = node; 
    // 每次记录是否超过了 10 如果超过须要进位
    var n = 0;
    // 每次从新赋值 l1 和 l2 的和
    var sum = 0;
    while (l1 || l2) {
      var n1 = l1 ? l1.val : 0;
      var n2 = l2? l2.val : 0;
      // 这里的 n 是代表进位过去的数值 如果小于 10 n 就为 0
      sum = n1 + n2 + n;
      // 将 n 置为小数 前面会用到
      n = parseInt(sum / 10);
      //%10 是为了如果大于等于 10 只保留个位
      cur.next = new ListNode(sum % 10); // 设置以后结点的下一个结点
      cur = cur.next; // 将以后结点后退到下一个结点
      if (l1) {l1 = l1.next;}
      if (l2) {l2 = l2.next;}
    }
    // 为了链表的最初一位相加也大于等于 10 的解决,比方 [9,9,9]+[9,9,9], 那么通过上面的解决就不会失落最初一位
     // 这里的 n 通过下面的 /10 的解决 如果大于 0 那就是十位数 
    // 那么下面的 sum 值就会进行这一次的累加
    if (n > 0) {cur.next = new ListNode(n);
    }
    return node.next;
  };
退出移动版