字符串相加

题意:

给定两个字符串形式的非负整数 num1num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

示例 1:

输入:num1 = “11”, num2 = “123”
输出:"

134"

示例 2:

输入:num1 = “456”, num2 = “77”
输出:“533”

示例 3:

输入:num1 = “0”, num2 = “0”
输出:“0”

提示:

  • 1 <= num1.length, num2.length <= 10^4
  • num1num2 都只包含数字 0-9
  • num1num2 都不包含任何前导零

题目来源: https://leetcode.cn/problems/add-strings/description/

解题方法:

方法一:长度以0补齐,从个位开始相加(从后往前),判断是否进一

// 长度以0补齐,从个位开始相加,判断是否进一
function addStrings($num1, $num2) {
     $strLen1 = strlen($num1);
     $strLen2 = strlen($num2);
     // 找到长的字符串的长度,用于循环
     $strlen = $strLen1 >= $strLen2 ? $strLen1 : $strLen2;
     // 短的字符串前补0
     if($strLen1 > $strLen2){
         $num2 = str_repeat("0", $strLen1 - $strLen2) . $num2;
     }else{
         $num1 = str_repeat("0", $strLen2 - $strLen1) . $num1;
     }
     $result = "";   //结果
     $is_add_one = 0;    //两者相加是否大于等于10,来判断是否进行加一
     for($i = $strlen - 1; $i >= 0; $i--){
         if(($num1[$i] + $num2[$i] + $is_add_one) >= 10){    //如果大于等于10,取个位进一
             $result = strval($num1[$i] + $num2[$i] + $is_add_one)[1] . $result;
             $is_add_one = 1;
             if($i == 0){
                 $result = "1" . $result;    //循环到最大位时前补一
             }
         }else{  //小于10时,相加即可
             $result = strval($num1[$i] + $num2[$i] + $is_add_one) . $result;
             $is_add_one = 0;
         }
     }
     return $result;  
}

方法二: 从后向前,对应的位置的数字相加,如果结果大于 9,需要进位
难点: 1.难点进位处理 2.最高位进位处理

此方法参考:
作者:Zou Zhipeng
链接:https://leetcode.cn/problems/add-strings/solutions/202746/php-jie-fa-by-zzpwestlife-51/
来源:力扣(LeetCode)

// 从后向前,对应的位置的数字相加,如果结果大于 9,需要进位
// 1.难点进位处理 2.最高位进位处理
function addStrings($num1, $num2) {
    $len1 = strlen($num1);
    $len2 = strlen($num2);
    if($len1 == 0) return $num2;
    if($len2 == 0) return $num1;
    // 从最低位开始处理
    $i = $len1 - 1;
    $j = $len2 - 1;
    // 进位标记
    $carry = 0;
    $return = '';
    // 使用该判断条件,一次遍历处理完所有情况
    while ($i >= 0 || $j >= 0 || $carry){
        $sum = $carry;
        if($i >= 0){
            $sum += substr($num1, $i, 1);
            $i--;
        }
        if($j >= 0){
            $sum += substr($num2, $j, 1);
            $j--;
        }
        // 进位处理
        $carry = floor($sum / 10);
        $return = $sum % 10 . $return;
    }
    return $return;
}

你可能感兴趣的:(PHP,php,算法,数据结构)