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

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

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

给你两个整数 nt 。请你返回大于等于 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和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

相关推荐
星星.72210 小时前
C++算法竞赛|二分查找与二分答案:边界模板、浮点二分、STL
数据结构·c++·算法
sel_910 小时前
【OPD论文导读(二)】OPD(On-Policy Distillation)全景调研:十篇论文讲透“在自己生成的内容上学习“这件事
人工智能·python·深度学习·学习·算法·语言模型
金幄科技11 小时前
RAG第四篇:重排序 Rerank——粗召回之后,为什么还需要一次精排
人工智能·算法·ai·ai编程
M78佐菲11 小时前
Linux学习笔记:文件IO
linux·笔记·学习·算法
lhldsg12 小时前
课程排课系统实战指南:从数据库设计到算法调优全流程解析
java·数据库·算法·小程序
BSD_HY12 小时前
薄膜开关矩阵扫描电路设计中的防鬼键措施
人工智能·算法·矩阵·人机交互·薄膜开关·源头工厂·深圳工厂
linux-hzh12 小时前
百日算法修炼 · Day 17
数据结构·算法
XUEYUAN521212 小时前
代理日志分析与监控:代理池健康状态巡检与分级告警体系搭建(运维实战)
运维·网络·网络协议·tcp/ip·算法·架构
sel_912 小时前
【多轮对话论文导读(七)】多轮对话论文阅读笔记:从数据生成、用户模拟到上下文重构与长期记忆
论文阅读·人工智能·笔记·深度学习·算法·语言模型·自然语言处理
远游客071313 小时前
为什么用「年×100+月」做比较
算法·gin