用枚举算法解决LeetCode第3348题最小可整除数位乘积II

3348.最小可整除数位乘积II

难度:困难

问题描述:

给你一个字符串num,表示一个正整数,同时给你一个整数t。

如果一个整数没有任何数位是0,那么我们称这个整数是无零数字。

请你返回一个字符串,这个字符串对应的整数是大于等于num的最小无零整数,且各数位之积能被t整除。如果不存在这样的数字,请你返回"-1"。

示例1:

输入:num="1234",t=256

输出:"1488"

解释:

大于等于1234且能被256整除的最小无零整数是1488,它的数位乘积为256。

示例2:

输入:num="12355",t=50

输出:"12355"

解释:

12355已经是无零且数位乘积能被50整除的整数,它的数位乘积为150。

示例3:

输入:num="11111",t=26

输出:"-1"

解释:

不存在大于等于11111且数位乘积能被26整除的整数。

提示:

2<=num.length<=2*105

num只包含['0','9']之间的数字。

num不包含前导0。

1<=t<=1014

问题分析及解题思路:

这个问题感觉是要用枚举算法来解决,从num整数开始,依次向后面列举,检验列举出来的整数是不是无零数字,如果是,再计算各数位之积,检验能否被t整除,如果能够被t整除,则就是所要寻找的数位之积能被t整除的大于等于num的最小整数。

但示例3又说到num="11111",t=26时,没有满足条件的无零数字,要输出-1。这个怎么办呢?很显然,从“11111”整数开始,依次向后面列举,是永远不能找出这样一个无零数字,使得其数位之积能被26整除的,所以如果用枚举算法,这就成了一个举不胜举无穷的死循环,问题得不到解决。

其实这个问题还是一个有趣的数字问题,我们发现t=26=2*13,要一个无零数字数位之积能够被26整除,说明这个无零数字的各数位之积必须要有一个因子是13,这样才能除尽,否则是永远不能被26整除的,但数位之积是各位数字的乘积,只能是1、2、......、9的乘积,不可能出现13这个因子,所以我们只要对t进行分解质因数,如果t中有大于10的质因数,则直接就可以判断,不存在这样的无零数字,其数位之积能够被t整除,直接输出-1即可。

根据上面的分析,解题思路如下:
  1. 编写检验整数字符串s是否是无零数字的函数isNozero(s),如果s是无零数字,返回True,否则返回False
  2. 编写检验一个数字t是否有大于10的质因数的函数fj(t),如果有大于10的质因数,返回True,否则返回False
  3. 编写寻找各数位之积大于等于num的最小无零数字的函数minInt(num,t),如果没有找到,返回-1,如果找到,返回找到的无零整数字符串
  4. 最后编写主程序,调用各函数即可解决问题

程序如下:
from functools import reduce
#检验整数字符串s中有没有数字0,如果有,返回False,否则返回True
def isNozero(s):return False if '0' in s else True#分解整数t,如果有大于10的质因子,返回True,否则返回False
def fj(t):for i in range(2,t+1):n=0while t%i==0:n=n+1t=t//iif n>=1 and i>10:return Trueelse:return False#找数位之积能被t整除的大于等于num的最小整数
def minInt(num,t):num=int(num)while True:if fj(t):return -1k=str(num)if isNozero(k):j=reduce(lambda x,y:x*y,list(map(int,list(k))))if j%t==0:return kelse:num=num+1else:num=num+1
num=input('pls input num=')
t=int(input('pls input t='))
print(minInt(num,t))

运行实例一

pls input num=1234

pls input t=50

1255

运行实例二

pls input num=1123

pls input t=39

-1

运行实例三

pls input num=12345

pls input t=120

12345

感悟:

当解决问题无法继续下去时,应该停下来仔细分析问题,或许就有新的发现,进而完善自己的解决方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/886188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SpringBoot】20 同步调用、异步调用、异步回调

Git仓库 https://gitee.com/Lin_DH/system 介绍 同步调用&#xff1a;指程序在执行时&#xff0c;调用方需要等待函数调用返回结果后&#xff0c;才能继续执行下一步操作&#xff0c;是一种阻塞式调用。 异步调用&#xff1a;指程序在执行时&#xff0c;调用方在调用函数后立…

ESLint 使用教程(五):ESLint 和 Prettier 的结合使用与冲突解决

系列文章 ESLint 使用教程&#xff08;一&#xff09;&#xff1a;从零配置 ESLint ESLint 使用教程&#xff08;二&#xff09;&#xff1a;一步步教你编写 Eslint 自定义规则 ESLint 使用教程&#xff08;三&#xff09;&#xff1a;12个ESLint 配置项功能与使用方式详解 ES…

Qt_day5_常用类

常用类 目录 1. QString 字符串类&#xff08;掌握&#xff09; 2. 容器类&#xff08;掌握&#xff09; 2.1 顺序容器QList 2.2 关联容器QMap 3. 几种Qt数据类型&#xff08;熟悉&#xff09; 3.1 跨平台数据类型 3.2 QVariant 统一数据类型 3.3 QStringList 字符串列表 4. QD…

VBA学习笔记:基础知识

1.打开编辑器 工具-选项&#xff0c;可设置编辑器字体大小等 2. 运行 快捷键F5&#xff0c;或 运行-运行宏 若提示宏被禁止&#xff0c;解决办法之一&#xff1a;工具-宏-安全性-安全级-中&#xff0c;关闭excel重新打开&#xff0c;启用宏 保存文件格式为xla或xlam 3. 基本…

【CANOE】【学习】【DecodeString】字节转为中文字符输出

系列文章目录 文章目录 系列文章目录前言一、DecodeString 转为中文字节输出二、代码举例1.代码Demo2.DecodeString 函数说明函数语法&#xff1a;参数说明&#xff1a;返回值&#xff1a;使用示例&#xff1a;示例代码&#xff1a; 说明&#xff1a; 前言 有时候使用的时候&a…

超好用shell脚本NuShell mac安装

利用管道控制任意系统 Nu 可以在 Linux、macOS 和 Windows 上运行。一次学习&#xff0c;处处可用。 一切皆数据 Nu 管道使用结构化数据&#xff0c;你可以用同样的方式安全地选择&#xff0c;过滤和排序。停止解析字符串&#xff0c;开始解决问题。 强大的插件系统 具备强…

【Window主机访问Ubuntu从机——Xrdp配置与使用】

使用Xrdp在Window环境下远程桌面访问Ubuntu主机 文章目录 Ubuntu安装图形化界面Ubuntu安装Xrdp通过网线连接两台主机Window主机有线连接配置Ubuntu从机设置测试有线连接 Window主机打开远程桌面功能参考文章总结 Ubuntu安装图形化界面 sudo apt update sudo apt upgrade sudo …

ECharts图表图例8

用eclipse软件制作动态单仪表图 用java知识点 代码截图&#xff1a;

实验6记录网络与故障排除

实验6记录网络与故障排除 实验目的及要求&#xff1a; 通过实验&#xff0c;掌握如何利用文档记录网络设备相关信息并完成网络拓扑结构的绘制。能够使用各种技术和工具来找出连通性问题&#xff0c;使用文档来指导故障排除工作&#xff0c;确定具体的网络问题&#xff0c;实施…

读取文件内容、修改文件内容、识别文件夹目录(Web操作系统文件/文件夹详解)

前言 因 Unicode IDE 编辑器导入文件、文件夹需要&#xff0c;研究了下导入文件/文件夹的功能实现&#xff0c;发现目前相关文章有点少&#xff0c;故而记录下过程&#xff0c;如果有误&#xff0c;还望指正。(API的兼容性及相关属性、接口定义&#xff0c;请自行查看文件系统 …

【卡尔曼滤波】数据融合Fusion的应用 C语言、Python实现(Kalman Filter)

【卡尔曼滤波】数据融合Fusion的应用 C语言、Python实现&#xff08;Kalman Filter&#xff09; 更新以gitee为准&#xff1a; gitee地址 文章目录 卡尔曼滤波数据融合Python实现C语言实现多个数据如何融合附录&#xff1a;压缩字符串、大小端格式转换压缩字符串浮点数压缩Pac…

docker-hub 无法访问,使用windows魔法拉取docker images再上传到linux docker环境中

云机的服务器是可以docker拉取镜像的&#xff0c;但是本地的虚拟机、物理服务器等网络环境不好的情况&#xff0c;是无法访问docker-hub的&#xff0c;即使更换了docker镜像源国内源也无法使用。 本文章使用 在魔法网络环境下的windows&#xff0c;下载docker images后&#xf…

Python →爬虫实践

爬取研究中心的书目 现在&#xff0c;想要把如下网站中的书目信息爬取出来。 案例一 耶鲁 Publications | Yale Law School 分析网页&#xff0c;如下图所示&#xff0c;需要爬取的页面&#xff0c;标签信息是“<p>”&#xff0c;所以用 itemssoup.find_all("p&…

【Linux学习】【Ubuntu入门】1-4 ubuntu终端操作与shell命令1

1.使用快捷键CtrlAltT打开命令终端&#xff0c;或者单击右键点击… 2.常用shell命令 目录信息查看命令&#xff1a;ls ls -a&#xff1a;显示目录所有文件及文件夹&#xff0c;包括隐藏文件&#xff0c;比如以.开头的 ls -l&#xff1a;显示文件的详细信息 ls -al&#xff1…

WordPress 6.7 “Rollins”发布

每个 WordPress 版本都会向一位在音乐界留下不可磨灭印记的艺术家致敬。WordPress 6.7 的代号为“Rollins”&#xff0c;旨在向传奇爵士萨克斯演奏家桑尼罗林斯致敬。罗林斯是爵士乐界最伟大的即兴演奏家和先驱之一&#xff0c;他以精湛的技术、创新精神和无畏的音乐表达方式影…

ESXi安装【真机和虚拟机】(超详细)

项目简介&#xff1a; ESXi&#xff08;Elastic Sky X Integrated&#xff09;是VMware公司开发的一种裸机虚拟化管理程序&#xff0c;允许用户在单一物理服务器上运行多个虚拟机&#xff08;VM&#xff09;。它直接安装在服务器硬件上&#xff0c;而不是操作系统之上&#xff…

【若依框架】代码生成详细教程,15分钟搭建Springboot+Vue3前后端分离项目,基于Mysql8数据库和Redis5,管理后台前端基于Vue3和Element Plus,开发小程序数据后台

今天我们来借助若依来快速的搭建一个基于springboot的Java管理后台&#xff0c;后台网页使用vue3和 Element Plus来快速搭建。这里我们可以借助若依自动生成Java和vue3代码&#xff0c;这就是若依的强大之处&#xff0c;即便你不会Java和vue开发&#xff0c;只要跟着石头哥也可…

HBuilder(uniapp) 配置android模拟器

HBuilder&#xff08;uniapp&#xff09; 配置android模拟器 选择完成之后&#xff0c;点击ok&#xff0c;再次点击Configure—》AVD Manager

flutter插件:录制系统播放的声音

该插件基于flutter包 flutter_screen_recording 和 github库 SystemAudioCaptureAndroid&#xff0c;实现了在安卓手机上录制系统播放声音的功能&#xff0c;也就是说&#xff0c;只要一个安卓应用没有设置不允许其它应用录制声音&#xff0c;该插件可以录制该应用播放的声音。…

Mac中安装OhMyZsh

Mac中安装OhMyZsh 文章目录 Mac中安装OhMyZsh一、Homebrew二、OhMyZsh1、Oh-My-Zsh配置1.1&#xff1a;主题配置1.2&#xff1a;插件配置&#xff08;语法高亮和自动提示&#xff09;1、zsh-autosuggestions&#xff08;需下载安装&#xff09;&#xff1a;高亮显示所有支持的命…