Welcome to Subscribe On Youtube

2520. Count the Digits That Divide a Number

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 <= 109
  • num does not contain 0 as one of its digits.

Solutions

Solution 1: Enumeration

We directly enumerate each digit $val$ of the integer $num$, and if $val$ can divide $num$, we add one to the answer.

After the enumeration, we return the answer.

The time complexity is $O(\log num)$, and the space complexity is $O(1)$.

  • class Solution { public int countDigits(int num) { int ans = 0; for (int x = num; x > 0; x /= 10) { if (num % (x % 10) == 0) { ++ans; } } return ans; } } 
  • class Solution { public: int countDigits(int num) { int ans = 0; for (int x = num; x > 0; x /= 10) { if (num % (x % 10) == 0) { ++ans; } } return ans; } }; 
  • class Solution: def countDigits(self, num: int) -> int: ans, x = 0, num while x: x, val = divmod(x, 10) ans += num % val == 0 return ans 
  • func countDigits(num int) (ans int) { for x := num; x > 0; x /= 10 { if num%(x%10) == 0 { ans++ } } return } 
  • function countDigits(num: number): number { let ans = 0; for (let x = num; x; x = (x / 10) | 0) { if (num % (x % 10) === 0) { ++ans; } } return ans; } 
  • impl Solution { pub fn count_digits(num: i32) -> i32 { let mut ans = 0; let mut cur = num; while cur != 0 { if num % (cur % 10) == 0 { ans += 1; } cur /= 10; } ans } } 

All Problems

All Solutions