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
Idea 1:
recursive
Solution 1:
/**
* @param {number} num
* @return {number}
*/
var addDigits = function(num) {
let nums = num.toString().split("");
let sumOfNums = sum(nums);
// base case:
if (sumOfNums < 10) return sumOfNums;
return addDigits(sumOfNums);
};
function sum(arr) {
return arr.reduce((a, b) => parseInt(a) + parseInt(b), 0);
}
Idea 2:
mathematics algorithms in O(1) runtime
Solution 2:
/**
* @param {number} num
* @return {number}
*/
var addDigits = function(num) {
return num % 9 ? num % 9 : Math.min(num, 9);
};