Задача с собеседования в Яндекс
Дана строка из десятичных цифр (длинное число, младшие разряды расположены по младшему индексу). Написать код, который умножит это число на число 1 <= n <= 9.
Ограничения по памяти: О(1) доп памяти, т.е. надо использовать исходную строку (считаем, что возможное увеличение длины на 1 разряд не приведет к реаллокации)
наш чат алгоритмистов
Решение:
Пройдемся по строке с разрядами и столбиком умножим число на n. Поддерживаем остаток и считаем так до конца
def multiply_digit_inplace(num_str, n):
if not (1 <= n <= 9):
raise ValueError("n должен быть от 1 до 9")
num = list(num_str) # строка как список символов (можно считать, что это изменяемый массив)
carry = 0
for i in range(len(num)):
digit = int(num[i])
prod = digit * n + carry
num[i] = str(prod % 10)
carry = prod // 10
if carry:
num.append(str(carry))
return ''.join(num)
Асимптотика O(N)
@algoses
Post #401
6.07K
- ❤ 5
- 😁 5
- 👏 1