Go 和 PHP 基於兩組數計算相加的結果

原文連接: go letcode,做者:三斤和他的喵 php 代碼我的原創

兩數相加(Add-Two-Numbers)

這是 LeetCode 的第二題,題目挺常規的,題幹以下:php

給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,而且它們的每一個節點只能存儲 一位 數字。
若是,咱們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。
您能夠假設除了數字 0 以外,這兩個數都不會以 0 開頭。
示例:
    輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
    輸出:7 -> 0 -> 8
    緣由:342 + 465 = 807
來源:力扣

解題思路

這個題目的解法相似咱們小時候算兩個多位數的加法:從低位開始相加,大於等於10時則取值的個位數,並向前進1
git

只不過如今多位數用鏈表來表示了而且最後的值用鏈表返回了而已。github

根據上面這個思路須要注意的是進位( carry ),相加的時要加上 carry 的值。數組

Go 實現spa

func addTwoNumbersOptimize(l1 *ListNode, l2 *ListNode) *ListNode {
    var (
        carry        int
        currentValue int
        centerValue  int
        point        = &ListNode{}
        head         = point
    )
    for l1 != nil || l2 != nil || carry != 0 {
        lValue := 0
        rValue := 0
        if l1 != nil {
            lValue = l1.Val
            l1 = l1.Next
        }
        if l2 != nil {
            rValue = l2.Val
            l2 = l2.Next
        }
        centerValue = lValue + rValue + carry
        currentValue = centerValue % 10
        carry = centerValue / 10
        point.Next = &ListNode{Val: currentValue}
        point = point.Next

    }
    return head.Next
}

PHP 實現3d

function addTwoNumbers($first, $second)
{
    $carry = 0;
    $str = '';

    // 循環次數以較長的數組爲準
    $firstCount = count($first);
    $secondCount = count($second);
    $count = $firstCount > $secondCount ? $firstCount : $secondCount;

    for ($i = 0; $i < $count; $i++) {
        $firstValue = $first[0] ?? 0;
        $secondValue = $second[0] ?? 0;
        array_shift($first);
        array_shift($second);

        // 計算,額外處理最後一次的狀況,在空字符串前追加數據
        $centerValue = $firstValue + $secondValue + $carry;
        $currentValue = $i === $count - 1 ? (int)$centerValue : $centerValue % 10;
        $carry = $centerValue / 10;
        $str = $currentValue . $str;
    }

    return $str;
}

echo addTwoNumbers([2, 4, 3], [5, 6, 4]); // output: 807
echo addTwoNumbers([2, 4, 3], [5, 6, 7]); // output: 1107

帶貨 -> 去看code

首發於 何曉東 博客blog

相關文章
相關標籤/搜索