← Static tasks

989. Add to Array-Form of Integer

leetcode easy

#array#csharp#easy#leetcode

Task

Массивная форма целого числа num - это массив, представляющий его цифры в порядке слева направо.

Например, для num = 1321, массивная форма - это [1, 3, 2, 1].

Дано num в массивной форме целого числа и целое число k, верните массивную форму числа num + k.

Пример

Input: num = [1,2,0,0], k = 34

Output: [1,2,3,4]

Explanation: 1200 + 34 = 1234

C# solution

matched/original
using System;
using System.Collections.Generic;
public class Solution {
    public IList<int> AddToArrayForm(int[] num, int k) {
        List<int> result = new List<int>();
        int n = num.Length;
        for (int i = n - 1; i >= 0; i--) {
            k += num[i];
            result.Add(k % 10);
            k /= 10;
        }
        while (k > 0) {
            result.Add(k % 10);
            k /= 10;
        }
        result.Reverse();
        return result;
    }
}

C++ solution

auto-draft, review before submit
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public vector<int> AddToArrayForm(vector<int>& num, int k) {
        List<int> result = new List<int>();
        int n = num.size();
        for (int i = n - 1; i >= 0; i--) {
            k += num[i];
            result.push_back(k % 10);
            k /= 10;
        }
        while (k > 0) {
            result.push_back(k % 10);
            k /= 10;
        }
        result.Reverse();
        return result;
    }
}

Java solution

auto-draft, review before submit
import java.util.*;
import java.math.*;

// Auto-generated Java draft from the C# solution. Review API differences before LeetCode submit.
public class Solution {
    public List<int> AddToArrayForm(int[] num, int k) {
        List<int> result = new List<int>();
        int n = num.length;
        for (int i = n - 1; i >= 0; i--) {
            k += num[i];
            result.add(k % 10);
            k /= 10;
        }
        while (k > 0) {
            result.add(k % 10);
            k /= 10;
        }
        result.Reverse();
        return result;
    }
}

Python solution

matched/original
def addToArrayForm(num, k):
    num = num[::-1]
    k = list(map(int, str(k)))[::-1]
    
    carry = 0
    result = []
    i = 0
    
    while i < len(num) or i < len(k) or carry:
        n = num[i] if i < len(num) else 0
        m = k[i] if i < len(k) else 0
        total = n + m + carry
        carry = total // 10
        result.append(total % 10)
        i += 1
    
    return result[::-1]

Go solution

matched/original
func addToArrayForm(num []int, k int) []int {
    var result []int
    n := len(num)
    
    for i := n - 1; i >= 0; i-- {
        k += num[i]
        result = append(result, k % 10)
        k /= 10
    }
    for k > 0 {
        result = append(result, k % 10)
        k /= 10
    }
    
    for i, j := 0, len(result) - 1; i < j; i, j = i + 1, j - 1 {
        result[i], result[j] = result[j], result[i]
    }
    
    return result
}

Explanation

Algorithm

1⃣Инициализация переменных:

Преобразуйте число k в массив его цифр и переверните оба массива (массив num и массив цифр k).

Завести переменную carry для хранения переноса и инициализировать ее нулем.

Создать пустой массив result для хранения результата.

2⃣Сложение массивов:

Пройдите по элементам массивов num и цифр k, начиная с их конца, сложите соответствующие цифры вместе с переносом (carry).

Если сумма больше 9, сохраните последнюю цифру в текущей позиции результата, а carry установите в 1.

Если сумма меньше 10, установите carry в 0.

Добавьте результат текущего сложения в массив result

3⃣Обработка оставшихся цифр и переноса:

Если один из массивов закончился раньше, продолжайте сложение оставшихся цифр другого массива с переносом.

Если после окончания всех сложений остается перенос (carry), добавьте его в начало массива result.

Переверните массив result обратно и верните его.

😎