problem:
Given a non-negative integer num , repeatedly add all its digits until the result have only one digit.
For example:
Given num = 38 , the process is like: 3 + 8 = 11 , 1 + 1 = 2 . Since have only one 2 digit, return it.
Follow up:
Could do it without any loop/recursion in O (1) runtime?
Analysis:
Note:all digits problem could be solved through underlying principle! for Thisproblem, the best reference Is:https://En.wikipedia.org/wiki/digital_rootthe meaning of Digital root is, it actually measures the distance between NUM and the largest number (the largest multi Ple of9before it). E:the Digital Root ofOne is 2, the largest multiple of 9 before it was 9, the ditance is 11-9 = 2 (just equal to digital root!) Thus we could directly compute digital root through the minus operation between NUM, and its leftmost mutiple of 9. The Larget multiple of9before a number.9 * ((NUM-1)/9) use (num-1) is to CaseNum is just the largest multiple of 9. forOther cases, it's actually equal to NUM/9
Solution:
Public class Solution { publicint adddigits (int num) { if (num < 0) thrownew illegalargumentexception ("The passed int num is illegal!" ); return num-9* ((num-1)/9);} }
[leetcode#258] ADD Digits