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)$.

Solution 2

This implementation follows the required operations directly. It traverses the relevant values and updates its state as each value is processed. After all required states have been considered, the maintained result is returned.

  • 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;
    }
    
    
    // Solution 2
    function countDigits(num: number): number {
        let ans = 0;
        for (const s of num.toString()) {
            if (num % Number(s) === 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
        }
    }
    
    
    // Solution 2
    impl Solution {
        pub fn count_digits(num: i32) -> i32 {
            num.to_string()
                .chars()
                .filter(|&c| c != '0')
                .filter(|&c| num % (c.to_digit(10).unwrap() as i32) == 0)
                .count() as i32
        }
    }
    
    
  • int countDigits(int num) {
        int ans = 0;
        int cur = num;
        while (cur) {
            if (num % (cur % 10) == 0) {
                ans++;
            }
            cur /= 10;
        }
        return ans;
    }
    

All Problems

All Solutions