目录

  1. 前文传送门:
  2. 系列教程索引
    1. 题目描述
    2. 解题思路:
    3. 文末彩蛋

C# 刷遍 Leetcode 面试题系列连载(3): No.728 - 自除数 编辑

前文传送门:

  1. C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介
  2. C#刷遍Leetcode面试题系列连载(2): No.38 - 报数

系列教程索引

传送门:https://enjoy233.cnblogs.com/articles/leetcode_csharp_index.html

  1. C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介
  2. C#刷遍Leetcode面试题系列连载(2): No.38 - 报数
  3. C# 刷遍 Leetcode 面试题系列连载(3): No.728 - 自除数

上篇文章中我们分析了一个递归描述的字符串问题,今天我们来分析一个数学问题,一道除法相关的面试题。

img

今天要给大家分析的面试题是 LeetCode 上第 728 号问题,

LeetCode - 728. 自除数

https://leetcode-cn.com/problems/self-dividing-numbers/


题目描述

自除数 是指可以被它包含的每一位数除尽的数。

例如,128 是一个自除数,因为 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。

还有,自除数不允许包含 0 。

给定上边界和下边界数字,输出一个列表,列表的元素是边界(含边界)内所有的自除数。


示例 1:

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

注意:

  • 每个输入参数的边界满足 1 <= left <= right <= 10000。

  • 贡献者: LeetCode
  • 题目难度: Easy
  • 通过率: 70.20%

相关话题

  • 数学

https://leetcode.com/tag/math


相似题目

  • 完美数

https://leetcode-cn.com/problems/perfect-number/ 难度: 简单


解题思路:

  • 设计一个判断单个数是否是自除数的函数,比如取名为 IsSelfDIv()
  • IsSelfDIv函数的要点是:

​ 1.排除含有0的数,因为0不能整除任何整数

​ 2.排除原数不是末位数字倍数的数

  • 遍历原数列,对每一个数调用一次进行IsSelfDIv函数,将满足要求的加入List中即可

已 AC的代码为:

hljs
public class Solution
{
public IList<int> SelfDividingNumbers(int left, int right)
{
List<int> list = new List<int>();
for (int i = left; i <= right; ++i)
{
if (isSelfDiv(i))
list.Add(i);
}
return list;
}
bool isSelfDiv(int n)
{
if (n < 10)
return true;
if (n % 10 == 0)
return false;
int t = n;
while (t != 0)
{
int rem = t % 10;
if (rem == 0)
return false;
if (rem > 1 && n % rem != 0) // 原数不是末位数字倍数的数需要排除
return false;
t /= 10;
}
return true;
}
}

运行结果:

执行用时: 244 ms, 在所有 csharp 提交中击败了100.00%的用户


相应的,如需测试,本地可执行的代码为:

hljs
using System;
using System.Collections.Generic;
namespace leetcode728
{
public class Solution
{
public IList<int> SelfDividingNumbers(int left, int right)
{
List<int> list = new List<int>();
for (int i = left; i <= right; ++i)
{
if (isSelfDiv(i))
list.Add(i);
}
return list;
}
bool isSelfDiv(int n)
{
if (n < 10)
return true;
if (n % 10 == 0)
return false;
int t = n;
while (t != 0)
{
int rem = t % 10;
if (rem == 0)
return false;
if (rem > 1 && n % rem != 0) // 原数不是末位数字倍数的数需要排除
return false;
t /= 10;
}
return true;
}
static void Main(string[] args)
{
var sol = new Solution();
var res = sol.SelfDividingNumbers(5, 50);
foreach (var item in res)
Console.WriteLine(item);
}
}
}

相应代码已经上传到github:

https://github.com/yanglr/Leetcode-CSharp/tree/master/leetcode728


作者简介: Bravo Yeung,计算机硕士,知乎干货答主(获81K 赞同, 37K 感谢, 234K 收藏)。曾在国内 Top3互联网视频直播公司短暂工作过,后加入一家外企做软件开发至今。


欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,学习能力的提升上有新的认识,欢迎转发分享给更多人。


欢迎各位读者加入 .NET技术交流群,在公众号后台回复“加群”或者“学习”即可。


大白技术控 公众号名片

文末彩蛋

微信后台回复“asp”,给你:一份全网最强的ASP.NET学习路线图。


回复“cs”,给你:一整套 C# 和 WPF 学习资源!


回复“core”,给你:2019年dotConf大会上发布的.NET core 3.0学习视频!



作者:极客玩家
出处:https://geekzl.com

如果,您希望更容易地发现我的新文章,不妨点击一下绿色通道的关注我,亦可微信搜索公众号大白技术控关注我。

如果您觉得阅读本文对您有帮助,请点击一下右下方的推荐按钮,您的推荐将是我写作的最大动力!
版权声明:本文为博主原创或转载文章,欢迎转载,但转载文章之后必须在文章页面明显位置注明出处,否则保留追究法律责任的权利。如您有任何疑问或者授权方面的协商,请          .
posted @   大白技术控  阅读(858)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?

打赏

>>

欢迎打赏支持我 ^_^

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示