C# 刷遍 Leetcode 面试题系列连载(3): No.728 - 自除数
前文传送门:
系列教程索引
传送门:https://enjoy233.cnblogs.com/articles/leetcode_csharp_index.html
- C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介
- C#刷遍Leetcode面试题系列连载(2): No.38 - 报数
- C# 刷遍 Leetcode 面试题系列连载(3): No.728 - 自除数
上篇文章中我们分析了一个递归描述的字符串问题,今天我们来分析一个数学问题,一道除法相关的面试题。

今天要给大家分析的面试题是 LeetCode 上第 728 号问题,
LeetCode - 728. 自除数
https://leetcode-cn.com/problems/self-dividing-numbers/
题目描述
自除数 是指可以被它包含的每一位数除尽的数。
例如,128 是一个自除数,因为 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。
还有,自除数不允许包含 0 。
给定上边界和下边界数字,输出一个列表,列表的元素是边界(含边界)内所有的自除数。
示例 1:
输入:
上边界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-cn.com/problems/perfect-number/ 难度: 简单
解题思路:
- 设计一个判断单个数是否是自除数的函数,比如取名为 IsSelfDIv()
- IsSelfDIv函数的要点是:
1.排除含有0的数,因为0不能整除任何整数
2.排除原数不是末位数字倍数的数
- 遍历原数列,对每一个数调用一次进行IsSelfDIv函数,将满足要求的加入List中即可
已 AC的代码为:
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%的用户
相应的,如需测试,本地可执行的代码为:
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学习视频!
C# 刷遍 Leetcode 面试题系列连载(3): No.728 - 自除数的更多相关文章
- C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介
目录 为什么要刷LeetCode 刷LeetCode有哪些好处? LeetCode vs 传统的 OJ LeetCode刷题时的心态建设 C#如何刷遍LeetCode 选项1: VS本地Debug + ...
- C#刷遍Leetcode面试题系列连载(2): No.38 - 报数
目录 前言 题目描述 相关话题 相似题目 解题思路: 运行结果: 代码要点: 参考资料: 文末彩蛋 前言 前文传送门: C# 刷遍 Leetcode 面试题系列连载(1) - 入门与工具简介 上篇文章 ...
- C#刷遍Leetcode面试题系列连载(4) No.633 - 平方数之和
上篇文章中一道数学问题 - 自除数,今天我们接着分析 LeetCode 中的另一道数学题吧~ 今天要给大家分析的面试题是 LeetCode 上第 633 号问题, Leetcode 633 - 平方数 ...
- C#刷遍Leetcode面试题系列连载(5):No.593 - 有效的正方形
上一篇 LeetCode 面试题中,我们分析了一道难度为 Easy 的数学题 - 自除数,提供了两种方法.今天我们来分析一道难度为 Medium 的面试题. 今天要给大家分析的面试题是 LeetCod ...
- C#刷遍Leetcode系列连载 索引
C#刷遍Leetcode系列文章 索引 索引(陆续发布中,请保持关注) C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介 C#刷遍Leetcode面试题系列连载(2): No.38 - ...
- .NET面试题系列[0] - 写在前面
.NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] - .NET框架基础知识(2) .NET面试题系列[3] - C# 基础知识(1) .NET ...
- 【转载】.NET面试题系列[0] - 写在前面
原文:.NET面试题系列[0] - 写在前面 索引: .NET框架基础知识[1] - .NET框架基础知识(1) http://www.cnblogs.com/haoyifei/p/5643689.h ...
- .NET面试题系列
索引: .NET框架基础知识[1] - http://www.cnblogs.com/haoyifei/p/5643689.html .NET框架基础知识[2] - http://www.cnblog ...
- Java容器--2021面试题系列教程(附答案解析)--大白话解读--JavaPub版本
Java容器--2021面试题系列教程(附答案解析)--大白话解读--JavaPub版本 前言 序言 再高大上的框架,也需要扎实的基础才能玩转,高频面试问题更是基础中的高频实战要点. 适合阅读人群 J ...
随机推荐
- Python3安装impala
步骤: 1.安装Visual C++,目前最新是2019版 安装工作负载c++桌面开发 2.pip3安装模块 pip3 install pure-sasl== pip3 install thrift- ...
- Latex学习笔记 第一章
1.使用空行分段. 空行只起分段的作用,使用过多的空行并不起增大段间间距的作用. 2.段前不用打空格,LateX会自动完成文字的缩进. 即使打了也会被自动忽略. 3.通常汉字后面的空格会被忽略,其他符 ...
- 图片在DIV里边水平垂直居中
图片在一个DIV中要垂直水平居中,首先定义一个DIV .wrap{ width: 600px; height: 400px; border: 1px #000 solid; } 插入图片 <di ...
- DIY客户端框架
C/S类型的客户端做过好多轮了,在架构上每次都调整优化一部分,慢慢的形成了DIY的框架性东西. 可是最近这一看呢,已经不像MVC了,然后有一天看到了MVP概念,咦!很像.再一看,嗯,就该是MVP. M ...
- Linux(ubuntu)下创建用户没有创建家目录
添加-m参数即可: sudo useradd -m username #参数-m 自动创建用户的家目录 得解也.本来是会自动创建的,但是如果使用ll命令查看没有被创建的话,则应该使用此命令来创建新用户 ...
- Python用Pandas读写Excel
Pandas是python的一个数据分析包,纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具.Pandas提供了大量能使我们快速便捷地处理数据的函数和方法. Pandas官方文档 ...
- 需求规格说明书(final)
1. 引言 1.1 编写目的 该文档是关于微信小程序自习吧的功能和性能描述,重点描述了小程序的功能需求,并作为小程序开发设计阶段的主要输入. 本文档的预期读者包括:triple兔成员,软件工程老师,用 ...
- Mysql双主加Keepalived+读写分离
一.MySQL于keepalived简介** 前言: 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要 ...
- spark 基础
scala版 ,基本名词概念及 rdd的基本创建及使用 var conf = new SparkConf() var sc: SparkContext = new SparkContext(conf) ...
- 【洛谷P3329】 [ZJOI2011]最小割(最小割树)
洛谷 题意: 给出一个无向图,之后有\(q,q\leq 30\)组询问,每组询问有一个\(x\),回答有多少点对\((a,b)\)其\(a-b\)最小割不超过\(x\). 思路: 这个题做法要最小割树 ...