Add Digits

LeetCode Q 258 - 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
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?

Solution

Solution1: Recursion

Code: Recursive approach

public int addDigits(int num) {
  if (num / 10 == 0) return num;
  int newNum = 0;
  while (num != 0) {
    newNum += num % 10;
    num /= 10;
  }
  return addDigits(newNum);
}

Solution2: Iteration

Code: Iterative approach

public int addDigits(int num) {
  while (num >= 10) {
    int newNum = 0;
    while (num != 0) {
      newNum += num % 10;
      num /= 10;
    }

    num = newNum;
  }

  return num;
}

Solution3: Follow Up

Code: No Recursion / loop version

public int addDigits(int num) {
  if (num == 0) return 0;

  if (num % 9 == 0) return 9;

  return num % 9;
}  

The math behind this is:
10^k % 9 = 1
a*10^k % 9 = a % 9


   Reprint policy


《Add Digits》 by Tong Shi is licensed under a Creative Commons Attribution 4.0 International License
 Previous
Missing Number Missing Number
LeetCode Q 268 - Missing NumberGiven an array containing n distinct numbers taken from 0, 1, 2, …, n, find the one that
2019-04-10 Tong Shi
Next 
Power of Two Power of Two
LeetCode Q 231 - Power of TwoGiven an integer, write a function to determine if it is a power of two. Example 1: Input:
2019-04-10 Tong Shi
  TOC