zoukankan      html  css  js  c++  java
  • leetcode——两数相加【二】

    前言

    You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.
    You may assume the two numbers do not contain any leading zero, except the number 0 itself.

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

    题目

    Example 1:

    Input: l1 = [2,4,3], l2 = [5,6,4]
    Output: [7,0,8]
    Explanation: 342 + 465 = 807.
    

    Example 2:

    Input: l1 = [0], l2 = [0]
    Output: [0]
    

    Example 3:

    Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
    Output: [8,9,9,9,0,0,0,1]
    

    Constraints:

    The number of nodes in each linked list is in the range [1, 100].
    0 <= Node.val <= 9
    It is guaranteed that the list represents a number that does not have leading zeros.
    

    解题

    PHP

    /**
     * Definition for a singly-linked list.
     * class ListNode {
     *     public $val = 0;
     *     public $next = null;
     *     function __construct($val = 0, $next = null) {
     *         $this->val = $val;
     *         $this->next = $next;
     *     }
     * }
     */
    class Solution {
    
        /**
         * @param ListNode $l1
         * @param ListNode $l2
         * @return ListNode
         */
        function addTwoNumbers($l1, $l2) {
            $tail = new ListNode();
            $head = $tail;
            $carry  = 0;
             while ($l1 || $l2 || $carry ){
                $sum= $l1->val + $l2->val + $carry ;
                $carry = $sum> 9 ? 1 : 0;
                $tail->next = new ListNode($sum% 10);
                $tail = $tail->next;
                if($l1) $l1 = $l1->next;
                if($l2) $l2 = $l2->next;
             };
            return $head->next;
        }
                
    }
    

    JavaScript

    /**
     * Definition for singly-linked list.
     * function ListNode(val, next) {
     *     this.val = (val===undefined ? 0 : val)
     *     this.next = (next===undefined ? null : next)
     * }
     */
    /**
     * @param {ListNode} l1
     * @param {ListNode} l2
     * @return {ListNode}
     */
    var addTwoNumbers = function(l1, l2) {
            //创建进位
            let carry = 0
            //创建一个头链表用于保存结果
            let tail = new ListNode(0)
            //保存头链表的位置用于最后的链表返回
            let head = tail
            while ( carry || l1 || l2) {
                let n1 = l1 !== null ? l1.val : 0
                let n2 = l2 !== null ? l2.val : 0
                //求和
                let sum = n1 + n2 + carry
                //如果sum大于9进位则为1
                carry = sum > 9 ? 1 : 0
                //tail的下一个节点
                tail.next = new ListNode(sum % 10)
                //tail指向下一个节点
                tail = tail.next 
                //l1指向下一个节点,以便计算第二个节点值
                if (l1) l1 = l1.next 
                //l2指向下一个节点,以便计算第二个节点值
                if (l2) l2 = l2.next 
            }
            //head.next中保存的第一个节点是刚开始定义的0
            return head.next
    };
    
    学无止境,谦卑而行.
  • 相关阅读:
    JS---案例:大量字符串拼接效果实现
    JS高级---三种创建对象的方式
    松软科技Web课堂:JavaScript HTML DOM 动画
    JS-DOM事件
    JS DOM操作(创建、遍历、获取、操作、删除节点)
    ES6函数的扩展
    月薪20k的web前端开发程序员,他们都会的这6招
    JS高级---识别正则表达式是否匹配
    揭秘webpack plugin
    react-React深入-一等公民-props-onChange
  • 原文地址:https://www.cnblogs.com/wangyang0210/p/14546992.html
Copyright © 2011-2022 走看看