Массивная форма целого числа 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# решение
сопоставлено/оригинал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++ решение
auto-draft, проверить перед отправкой#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 решение
auto-draft, проверить перед отправкой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 решение
сопоставлено/оригинал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 решение
сопоставлено/оригинал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
}
Algorithm
1⃣Инициализация переменных:
Преобразуйте число k в массив его цифр и переверните оба массива (массив num и массив цифр k).
Завести переменную carry для хранения переноса и инициализировать ее нулем.
Создать пустой массив result для хранения результата.
2⃣Сложение массивов:
Пройдите по элементам массивов num и цифр k, начиная с их конца, сложите соответствующие цифры вместе с переносом (carry).
Если сумма больше 9, сохраните последнюю цифру в текущей позиции результата, а carry установите в 1.
Если сумма меньше 10, установите carry в 0.
Добавьте результат текущего сложения в массив result
3⃣Обработка оставшихся цифр и переноса:
Если один из массивов закончился раньше, продолжайте сложение оставшихся цифр другого массива с переносом.
Если после окончания всех сложений остается перенос (carry), добавьте его в начало массива result.
Переверните массив result обратно и верните его.
😎
Вакансии для этой задачи
Показаны активные вакансии с пересечением по тегам задачи.