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