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 */
};