Add Digits
LeetCode July - Day 26
Problem Statement
Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.
Example:
Input: 38
Output: 2
Explanation: The process is like: 3 + 8 = 11, 1 + 1 = 2. Since 2 has only one digit, return it.
Follow up:
Could you do it without any loop/recursion in O(1) runtime?
Inputs, Outputs, Constraints & Exceptions
- I: number {num}
- O: number
- C: num is non-negative (i.e. num >= 0)
- E: - num has only 1 digit
- num is 0
PseudoCode
while num is > 9
let sum = 0
while num > 0
sum += num % 10
num /= 10
num = sum
return num
Code (iterative)
/**
* @param {number} num
* @return {number}
*/
function addDigits(num) {
while(num > 9){
let sum = 0;
while(num > 0){
sum += num % 10
num = Math.floor(num/10)
}
num = sum
}
return num
};
Time complexity: O($k * log_{10}N$)
- where N is our input num, and k is the number of times we need to add digits
Space complexity: O(1)
Code (recursive)
/**
* @param {number} num
* @return {number}
*/
function addDigits(num) {
/* todo */
};