C#刷遍Leetcode面试题系列连载(3): No.728 - 自除数
點擊藍字“dotNET匠人”關注我喲
加個“星標★”,每日 7:15,好文必達!
前言
前文傳送門:
上篇文章中我們分析了一個遞歸描述的字符串問題,今天我們來分析一個數學問題,一道除法相關的面試題。
今天要給大家分析的面試題是 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.com/tag/math
相似題目
完美數
https://leetcode-cn.com/problems/perfect-number/?難度:?簡單
解題思路:
設計一個判斷單個數是否是自除數的函數,比如取名為 IsSelfDIv()
IsSelfDIv函數的要點是:
排除數位中含有0的數
排除原數不是末位數字倍數的數
遍歷原數列,對每一個數調用一次進行 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; } }運行結果:
執行用時: 244ms, 在所有 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
End
作者簡介: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 - 自除数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一键分享博客或新闻到Teams好友或频道
- 下一篇: 【.NET Core 3.0】框架之十二