LeetCode 풀기 - 두 개의 숫자 더하기

9946 단어 javascript

의문



두 개의 음이 아닌 정수를 나타내는 두 개의 비어 있지 않은 연결 목록이 제공됩니다. 숫자는 역순으로 저장되며 각 노드에는 단일 숫자가 포함됩니다. 두 숫자를 더하고 합을 연결 목록으로 반환합니다.

숫자 0 자체를 제외하고 두 숫자에 선행 0이 포함되어 있지 않다고 가정할 수 있습니다.

예 1:

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


예 2:

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


예 3:

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


제약:
  • 각 연결 목록의 노드 수는 [1, 100] 범위에 있습니다.
  • 0 <= Node.val <= 9
  • 목록이 선행 0이 없는 숫자를 나타내는 것이 보장됩니다.

  • 갑시다!



    를 사용하여 해결합니다.

  • P - 두 개의 음이 아닌 정수를 나타내는 비어 있지 않은 두 개의 연결 목록.

  • R - 추가된 두 숫자의 연결 목록 반환

  • E - 질문에 의해 제공된 예. (위 참조)

  • P - 아래 참조

  • 노드 목록에 대해 알기 전에 ...

    var addTwoNumbers = function(l1, l2) {
        const reverseOfL1 = reverseArr(l1)
        const reverseOfL2 = reverseArr(l2)
        let list = []
        let carry = 0
    
        for (let i=0; i<l1.length; i++) {
            const sum = reverseOfL1[i] + reverseOfL2[i]
            if (sum > 9) {
                list.push(sum%10+carry)
                carry = 1
            } else {
                list.push(sum+carry)
                carry = 0
            } 
        }
    
        return list
    }
    
    function reverseArr(arr) {
        return arr.reduce((newArr,num) => {
          newArr.unshift(num)
          return newArr
        }, [])
    }
    
    


    내 실수를 깨닫고 NodeList 및 Linked Lists를 읽습니다. 아래 답변:

    let addTwoNumbers = function(l1, l2) {
        let dummyHead = new ListNode(0);
        let p1 = l1;
        let p2 = l2;
        let current = dummyHead;
        let carry = 0;
    
        while (p1 !== null || p2 !== null) {
            let x = (p1 !== null) ? p1.val : 0;
            let y = (p2 !== null) ? p2.val : 0;
            let sum = x + y + carry;
    
            carry = Math.floor(sum / 10);
            current.next = new ListNode(sum % 10);
            current = current.next;
    
            if (p1 !== null) {
                p1 = p1.next;
            }
            if (p2 !== null) {
                p2 = p2.next;
            }
        }
    
        if (carry > 0) {
            current.next = new ListNode(1);
        }
    
        return dummyHead.next;
    };
    
    


    결론



    기억하세요... 즐거운 코딩, 친구들! =)

    출처


  • https://leetcode.com/problems/add-two-numbers/
  • https://developer.mozilla.org/en-US/docs/Web/API/NodeList
  • https://www.freecodecamp.org/news/implementing-a-linked-list-in-javascript/
  • 좋은 웹페이지 즐겨찾기