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 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.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学习视频!
如果,您希望更容易地发现我的新文章,不妨点击一下绿色通道的【关注我】,亦可微信搜索公众号「大白技术控」关注我。
如果您觉得阅读本文对您有帮助,请点击一下右下方的推荐按钮,您的推荐将是我写作的最大动力!版权声明:本文为博主原创或转载文章,欢迎转载,但转载文章之后必须在文章页面明显位置注明出处,否则保留追究法律责任的权利。如您有任何疑问或者授权方面的协商,请 .
【推荐】FlashTable:表单开发界的极速跑车,让你的开发效率一路狂飙
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· MySQL查询执行顺序:一张图看懂SQL是如何工作的
· 为什么PostgreSQL不自动缓存执行计划?
· 于是转身独立开发者
· C#.Net筑基-泛型T & 协变逆变
· dotnet 代码调试方法
· Cursor 实战万字经验分享,与 AI 编码的深度思考
· 精选 10 个 C#/.NET 开发必备开源库!
· 用 AI 制作超长视频,保姆级教程!
· C#:wpf ui 4.0 是如何实现页面导航的?
· Cursor 网页版来了,这下拉屎时也能工作了