Easy

题目描述

给你一个整数 num ,返回 num 中能够整除 num 的数字的数目。

如果 nums % val == 0 ,则认为整数 val 可以整除 nums

示例 1:

输入:num = 7
输出:1
解释:7 被自己整除,因此答案是 1 。

示例 2:

输入:num = 121
输出:2
解释:121 可以被 1 整除,但不能被 2 整除。由于 1 在数字中出现两次,我们返回 2 。

示例 3:

输入:num = 1248
输出:4
解释:1248 能被它的每一位数字整除,因此答案是 4 。

提示:

  • 1 <= num <= 10^9
  • num 不含 0 作为其中一位数字。

解题思路

这道题的核心思路是遍历数字的每一位,检查该位数字是否能整除原数字。

解法分析:

  1. 数字拆分法(推荐):通过不断对10取余和整除来获取每一位数字

    • 使用 num % 10 获取最低位数字
    • 使用 num / 10 去除最低位,继续处理剩余部分
    • 对每一位数字检查是否能整除原数字
  2. 字符串转换法:将数字转为字符串,遍历每个字符

    • 实现简单但涉及类型转换,性能稍逊

算法步骤:

  1. 保存原始数字用于整除判断
  2. 初始化计数器为0
  3. 当数字大于0时循环:
    • 取出最低位数字
    • 检查该数字是否能整除原数字
    • 如果能整除,计数器加1
    • 去除最低位,继续处理
  4. 返回计数结果

由于题目保证数字中不含0,所以不需要处理除0的情况。

代码实现

class Solution {
public:
    int countDigits(int num) {
        int originalNum = num;
        int count = 0;
        
        while (num > 0) {
            int digit = num % 10;
            if (originalNum % digit == 0) {
                count++;
            }
            num /= 10;
        }
        
        return count;
    }
};
class Solution:
    def countDigits(self, num: int) -> int:
        original_num = num
        count = 0
        
        while num > 0:
            digit = num % 10
            if original_num % digit == 0:
                count += 1
            num //= 10
            
        return count
public class Solution {
    public int CountDigits(int num) {
        int originalNum = num;
        int count = 0;
        
        while (num > 0) {
            int digit = num % 10;
            if (originalNum % digit == 0) {
                count++;
            }
            num /= 10;
        }
        
        return count;
    }
}
/**
 * @param {number} num
 * @return {number}
 */
var countDigits = function(num) {
    let count = 0;
    let temp = num;
    
    while (temp > 0) {
        let digit = temp % 10;
        if (num % digit === 0) {
            count++;
        }
        temp = Math.floor(temp / 10);
    }
    
    return count;
};

复杂度分析

复杂度类型复杂度说明
时间复杂度O(log n)需要遍历数字的每一位,位数为 log₁₀(n)
空间复杂度O(1)只使用常数额外空间

相关题目