app网站建设济南营销型网站建设

苏州优伊机器人科技有限公司 2026/09/09 19:18:02

自除数

问题描述

自除数是指可以被它包含的每一位数整除的正整数。
例如,128 是一个自除数,因为128 % 1 == 0128 % 2 == 0128 % 8 == 0

注意:自除数不允许包含 0,因为任何数除以 0 都是未定义的。

给定两个整数leftright,返回[left, right]范围内所有自除数的列表。

示例

输入: left = 1, right = 22 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]

算法思路

  1. 遍历[left, right]范围内的每个数字
  2. 对每个数字,提取其每一位数字进行验证
  3. 验证条件:
    • 不能包含数字 0(因为除以 0 未定义)
    • 原数字必须能被每一位数字整除
  4. 如果满足所有条件,则为自除数

代码实现

方法一:逐位验证

importjava.util.*;classSolution{/** * 找出指定范围内所有的自除数 * * @param left 范围左边界(包含) * @param right 范围右边界(包含) * @return 自除数列表 */publicList<Integer>selfDividingNumbers(intleft,intright){List<Integer>result=newArrayList<>();// 遍历给定范围内的每个数字for(intnum=left;num<=right;num++){// 检查当前数字是否为自除数if(isSelfDividing(num)){result.add(num);}}returnresult;}/** * 判断一个数字是否为自除数 * * @param num 待检查的数字 * @return true表示是自除数,false表示不是 */privatebooleanisSelfDividing(intnum){intoriginal=num;// 保存原始数字用于后续的整除判断// 逐位检查数字的每一位while(num>0){intdigit=num%10;// 获取当前数字的最后一位// 如果包含0,则不是自除数// 任何数都不能被0整除(除以0未定义)if(digit==0){returnfalse;}// 原始数字必须能被当前位数字整除if(original%digit!=0){returnfalse;}num/=10;// 去掉最后一位,继续检查下一位}// 所有位都通过检查,是自除数returntrue;}}

方法二:字符串

importjava.util.*;classSolution{/** * 使用字符串判断自除数 * * @param left 范围左边界(包含) * @param right 范围右边界(包含) * @return 自除数列表 */publicList<Integer>selfDividingNumbers(intleft,intright){List<Integer>result=newArrayList<>();for(intnum=left;num<=right;num++){if(isSelfDividingString(num)){result.add(num);}}returnresult;}/** * 使用字符串判断自除数 * * @param num 待检查的数字 * @return true表示是自除数,false表示不是 */privatebooleanisSelfDividingString(intnum){StringnumStr=String.valueOf(num);// 遍历字符串的每个字符for(charc:numStr.toCharArray()){intdigit=c-'0';// 将字符转换为数字// 检查是否包含0或不能整除if(digit==0||num%digit!=0){returnfalse;}}returntrue;}}

算法分析

  • 时间复杂度:O(n × log m)

    • n = right - left + 1(范围内的数字个数)
    • log m = 数字的位数(m 为数字的大小,以10为底的对数)
    • 每个数字需要检查其所有位数
  • 空间复杂度:O(1)(不包括结果列表)

    • 只使用了常数个额外变量

算法过程

输入:left = 1, right = 22

  1. num = 1

    • 位数:1
    • 1 % 1 == 0
  2. num = 2

    • 位数:2
    • 2 % 2 == 0
  3. num = 10

    • 位数:1, 0
    • 包含0
  4. num = 11

    • 位数:1, 1
    • 11 % 1 == 0

最终结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]

测试用例

publicstaticvoidmain(String[]args){Solutionsolution=newSolution();// 测试用例1:标准示例System.out.println("Test 1: "+solution.selfDividingNumbers(1,22));// [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]// 测试用例2:包含10的范围System.out.println("Test 2: "+solution.selfDividingNumbers(10,15));// [11, 12, 15]// 测试用例3:单个数字System.out.println("Test 3: "+solution.selfDividingNumbers(1,1));// [1]// 测试用例4:较大范围System.out.println("Test 4: "+solution.selfDividingNumbers(1,100));// 包含1-9, 11, 12, 15, 22, 24, 33, 36, 44, 48, 55, 66, 77, 88, 99// 测试用例5:包含边界值System.out.println("Test 5: "+solution.selfDividingNumbers(47,85));// [48, 55, 66, 77]// 测试用例6:无自除数的范围System.out.println("Test 6: "+solution.selfDividingNumbers(100,101));// []// 测试用例7:包含2000System.out.println("Test 7: "+solution.selfDividingNumbers(1999,2000));// []}

关键点

  1. 0

    • 自除数绝对不能包含数字0
  2. 原始数字保存

    • 在逐位检查时,必须使用原始数字进行整除运算
  3. 位数提取

    • 使用num % 10获取最后一位
    • 使用num / 10去掉最后一位

常见问题

  1. 为什么不能包含0?

    • 数学上除以0是未定义的操作
    • 即使其他位都能整除,只要包含0就不是自除数
  2. 为什么要保存原始数字?

    • 在逐位提取过程中,原数字会被修改(num /= 10
    • 整除判断必须用完整的原始数字
  3. 单数字(1-9)为什么都是自除数?

    • 任何非零数字都能被自己整除
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

英文网站建设旅游网站建设

《[含文档+PPT+源码等]基于Python的高校教育教材信息管理系统设计与实现》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功以及课程答疑与微信售

2026/06/30 11:14:24

四川网站建设泸州网站建设

在医学图像分割领域,你是否经常遇到这样的困境:模型在整体区域预测上表现不错,但边界细节却模糊不清?特别是在心脏MR、脑部病灶等复杂结构的分割任务

2026/06/30 11:27:25

容桂网站建设吉林网站建设

快速入门指南:Adafruit PN532 NFC/RFID库的完整使用教程【免费下载链接】Adafruit-PN532Arduino library for SPI and I2C a

2026/06/30 14:17:09

厦门网站建设移动网站建设

第一章:Open-AutoGLM 二次开发灵活性横向测评在当前大模型生态快速演进的背景下,Open-AutoGLM 作为开源自动推理框架,其二次开发能力成为开

2026/06/30 11:37:26

黑龙江网站建设咸阳网站建设

国产信创动环监控系统为工厂环境管理带来了新的变革。它通过实时数据监测,帮助企业有效掌握环境状况和设备运行情况,从而提高管理效率。例如,系统能够自动检测温度、湿

2026/06/30 12:15:00

网站建设运营十堰网站建设

Qwen3-VL部署成本分析:租用云GPU vs 自建集群性价比比较在AI应用加速落地的今天,多模态大模型正从实验室走向真实业务场景。无论是智能客服中识别用户上传的截图&#

2026/06/30 10:54:22

上海营销型网站建设网站建设 东莞

第一章:Dify插件开发入门指南Dify 是一个支持自定义插件扩展的低代码 AI 应用开发平台,允许开发者通过编写插件集成外部服务、增强功能模块或定制业务逻辑。插件以独立的

2026/06/30 11:25:55

电子商务网站建设中国建设银行网站

PaddlePaddle镜像能否用于野生动物保护?红外相机识别系统在云南高黎贡山的密林深处,一台红外相机悄然记录下一只云豹踱步的身影。这张照片将在数小时内完成从“原始像素”

2026/06/30 11:51:57

深圳外贸网站建设承德网站建设

边缘计算场景应用:在本地服务器运行Anything-LLM的优势在金融、医疗和法律等行业,每天都有成千上万的文档被创建、归档和查阅。员工查找一份合同条款可能要翻遍多个共享文

2026/06/30 10:31:20