2021-03-19 01:00:54 +01:00
|
|
|
# Challenge name: Add Digits
|
|
|
|
#
|
|
|
|
# Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.
|
|
|
|
#
|
|
|
|
# Example:
|
|
|
|
#
|
|
|
|
# Input: 38
|
|
|
|
# Output: 2
|
2021-03-19 01:05:12 +01:00
|
|
|
# Explanation: 3 + 8 = 11, 1 + 1 = 2.
|
2021-03-19 01:00:54 +01:00
|
|
|
|
|
|
|
#
|
|
|
|
# Approach: Mathematical: Digital Root
|
2021-03-19 01:06:59 +01:00
|
|
|
#
|
2021-03-19 01:00:54 +01:00
|
|
|
# https://en.wikipedia.org/wiki/Digital_root
|
2021-03-19 01:06:59 +01:00
|
|
|
# https://brilliant.org/wiki/digital-root/
|
2021-03-19 01:00:54 +01:00
|
|
|
#
|
|
|
|
|
|
|
|
#
|
|
|
|
# Complexity Analysis
|
|
|
|
#
|
|
|
|
# Time Complexity: O(1).
|
|
|
|
# Space Complexity: O(1).
|
|
|
|
|
|
|
|
def add_digits(num)
|
2021-03-19 01:04:22 +01:00
|
|
|
return 0 if num == 0
|
|
|
|
return 9 if num % 9 == 0
|
|
|
|
|
|
|
|
num % 9
|
2021-03-19 01:00:54 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
puts(add_digits(38))
|
|
|
|
# # => 2
|
|
|
|
|
|
|
|
puts(add_digits(284))
|
|
|
|
# # => 5
|