LeetCode 3345.最小可整除数位乘积 I:暴力枚举(从n开始尝试)

【LetMeFly】3345.最小可整除数位乘积 I:暴力枚举(从n开始尝试)

力扣题目链接:https://leetcode.cn/problems/smallest-divisible-digit-product-i/

给你两个整数 n 和 t 。请你返回大于等于 n 的 最小 整数,且该整数的 各数位之积 能被 t 整除。

示例 1:
**输入:**n = 10, t = 2

**输出:**10

解释:

10 的数位乘积为 0 ,可以被 2 整除,所以它是大于等于 10 且满足题目要求的最小整数。

示例 2:
**输入:**n = 15, t = 3

**输出:**16

解释:

16 的数位乘积为 6 ,可以被 3 整除,所以它是大于等于 15 且满足题目要求的最小整数。

提示:

  • 1 <= n <= 100
  • 1 <= t <= 10

解题方法:从n开始尝试

从 n n n开始递增枚举,如果当前数字每一位只积是 t t t的倍数,则返回。

最多枚举 10 10 10个数一定会出现一个 0 0 0, 0 0 0一定是 t t t的倍数。

  • 时间复杂度 O ( log ⁡ n ) O(\log n) O(logn)
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
cpp 复制代码
/*
 * @LastEditTime: 2026-08-06 15:21:51
 */
class Solution {
private:
    bool ok(int n, int t) {
        int mul = 1;
        while (n) {
            mul *= n % 10;
            n /= 10;
        }
        return mul % t == 0;
    }
public:
    int smallestNumber(int n, int t) {
        while (!ok(n, t)) {
            n++;
        }
        return n;
    }
};
Python
python 复制代码
'''
LastEditTime: 2026-08-06 15:24:33
'''
class Solution:
    def smallestNumber(self, n: int, t: int) -> int:
        while True:
            mul = 1
            for i in str(n):
                mul *= ord(i) - ord('0')
            if mul % t == 0:
                return n
            n += 1

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

相关推荐
邵奈一17 小时前
GPT-6.1 Terra速度是Sol的3倍,价格减半
算法
RaaS10017 小时前
Node.js Brotli RCE 漏洞自查指南:fetch、undici、axios 都在影响面,三分钟确认你的版本
人工智能·深度学习·算法
shehuiyuelaiyuehao17 小时前
算法56,重排链表
数据结构·算法·链表
qq_4523962318 小时前
第四篇:《索引原理与实战:B-tree、Hash、GIN、GiST、BRIN》
算法·哈希算法·gin
西索斯coding18 小时前
Qwen3-Max 与 Qwen-Plus:60 个真实修复任务评测方案
大数据·网络·算法·ai
INGNIGHT18 小时前
440 · 背包问题(三)(无限次数)
算法·leetcode·动态规划
suhan18 小时前
【数据结构】七、查找:1.查找的概念、线性结构查找(顺序、折半(二分)、插值、稠密、分块、倒排)
数据结构·算法·排序算法
killerbasd19 小时前
总结 10.26
算法
深圳安锐科技有限公司19 小时前
从成像尺度到亚像素解算:变焦视觉位移监测如何让远近断面都稳
图像处理·人工智能·深度学习·算法·计算机视觉·系统架构·结构健康监测