Skip to content
On this page

258. Add Digits share

Problem Statement

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 is
38 --> 3 + 8 --> 11
11 --> 1 + 1 --> 2
Since 2 has only one digit, return it.

Example 2:

Input: num = 0
Output: 0

 

Constraints:

  • 0 <= num <= 231 - 1

 

Follow up: Could you do it without any loop/recursion in O(1) runtime?

Click to open Hints
  • A naive implementation of the above process is trivial. Could you come up with other methods?
  • What are all the possible results?
  • How do they occur, periodically or randomly?
  • You may find this Wikipedia article useful.

Solution:

rs
impl Solution {
    pub fn add_digits(num: i32) -> i32 {
        let mut num = num;

        // loop while the number is greater than 9
        while num > 9 {
            let mut sum = 0;
            // loop while the number is greater than 0,
            // add the last digit to the sum,
            // and divide the number by 10
            while num > 0 {
                sum += num % 10;
                num /= 10;
            }
            // set the number to the sum
            num = sum;
        }

        num
    }
}

...


Released under the MIT License.