2520. Count the Digits That Divide a Number
SourceWeekly Contest 326 Q1DifficultyEasyRating1260
Description
Given an integer num, return the number of digits in num that divide num.
An integer val divides nums if nums % val == 0.
Example 1:
Input: num = 7 Output: 1 Explanation: 7 divides itself, hence the answer is 1.
Example 2:
Input: num = 121 Output: 2 Explanation: 121 is divisible by 1, but not 2. Since 1 occurs twice as a digit, we return 2.
Example 3:
Input: num = 1248 Output: 4 Explanation: 1248 is divisible by all of its digits, hence the answer is 4.
Constraints:
1 <= num <= 109numdoes not contain0as one of its digits.
Solutions
Solution 1: Enumeration
Thinking
Count how many digits of \(\textit{num}\) divide \(\textit{num}\). There are at most ten digits, so enumerating them is enough.
Repeatedly take \(\textit{val} = \textit{num} \bmod 10\) and test \(\textit{num} \bmod \textit{val} = 0\). The input contains no zero, so division by zero does not arise.
We directly enumerate each digit \(\textit{val}\) of the integer \(\textit{num}\), and if \(\textit{val}\) can divide \(\textit{num}\), we add one to the answer.
After the enumeration, we return the answer.
The time complexity is \(O(\log \textit{num})\), and the space complexity is \(O(1)\).
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 | |
Solution 2
Thinking
Solution 1 extracts digits arithmetically. Converting \(\textit{num}\) to a decimal string and testing each character yields the same check; only the way digits are obtained changes.
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 | |