258. Add Digits
Given an integer num, repeatedly add all its digits until the result has only one digit, and return it.
Example 1:
Input: num = 38
Output: 2
Explanation: The process is38 --> 3 + 8 --> 11
11 --> 1 + 1 --> 2
Since 2 has only one digit, return it.
Example 2:
Input: num = 0
Output: 0
Constraints:
- 0 < = n u m < = 2 31 − 1 0 <= num <= 2^{31} - 1 0<=num<=231−1
From: LeetCode
Link: 258. Add Digits
Solution:
Ideas:
1. Digital Root Concept: The digital root of a number is the single-digit value obtained by an iterative process of summing digits, on each iteration using the result from the previous iteration. The digital root can be directly calculated using the formula:
- If num == 0, then the digital root is 0.
- If num % 9 == 0, then the digital root is 9 (except when num is 0).
- Otherwise, the digital root is num % 9.
2. Mathematical Insight:
- The digital root of a non-zero number is 1 + (num - 1) % 9, which simplifies to the above formula in the code.
3. Code Explanation:
- If num is 0, return 0.
- Otherwise, check if num % 9 == 0. If true, return 9 because the number is divisible by 9 and non-zero.
- If num % 9 != 0, return num % 9.
Code:
c
int addDigits(int num) {
if (num == 0) return 0;
return (num % 9 == 0) ? 9 : (num % 9);
}