Potrzebuję porady na temat mojego rozwiązania opartego na rombach, aby rozwiązać problem z Ankiecie. Problem jest następującyAlgorytm zaimplementowany w ruby w celu dodania go do liczby reprezentowanej jako tablica
Given a non-negative number represented as an array of digits,
add 1 to the number (increment the number represented by the digits).
The digits are stored such that the most significant digit is at the head of the list. There can be upto 10,000 digits in the input array.
Example:
If the vector has [1, 2, 3]
the returned vector should be [1, 2, 4]
as 123 + 1 = 124.
Moje pierwsze rozwiązanie było następująco
def plusOne(a)
new_number = a.join.to_i + 1
result = []
while new_number > 0
result.push new_number%10
new_number /= 10
end
result.reverse
end
Algorytm ten wydaje słuszne, to przeszły wejścia testowe ale o poddaniu daje „Przekroczono limit czasowy”. Moje drugie rozwiązanie było udane i jest następujące.
def plusOne(a)
carry = 1
start_index = a.size - 1
temp_result = []
ans = []
for i in start_index.downto(0)
sum = a[i] + carry
carry = sum/10
temp_result.push sum%10
end
temp_result.push carry
start_index = temp_result.size - 1
while start_index >= 0 and temp_result[start_index] == 0
start_index -= 1
end
while start_index >= 0
ans.push temp_result[start_index]
start_index -= 1
end
ans
end
Moje pierwsze rozwiązanie wydaje się być O (n) dla mnie jak jesteśmy tylko iteracja ciągu cyfr w liczbie. Czy ktoś może mi powiedzieć, dlaczego mógł przekroczyć limit czasowy?
Dziękuję
@ JörgWMittag: Zauważ, że 'Liczba całkowita liczb' zwraca najmniej znaczącą cyfrę na czele tablicy. –