C#刷遍Leetcode面试题系列连载(3): No.728 - 自除数
點(diǎn)擊藍(lán)字“dotNET匠人”關(guān)注我喲
加個(gè)“星標(biāo)★”,每日 7:15,好文必達(dá)!
前言
前文傳送門:
上篇文章中我們分析了一個(gè)遞歸描述的字符串問題,今天我們來分析一個(gè)數(shù)學(xué)問題,一道除法相關(guān)的面試題。
今天要給大家分析的面試題是 LeetCode 上第 728 號(hào)問題,
LeetCode - 728. 自除數(shù)
https://leetcode-cn.com/problems/self-dividing-numbers/
題目描述
自除數(shù) 是指可以被它包含的每一位數(shù)除盡的數(shù)。
例如,128 是一個(gè)自除數(shù),因?yàn)?128%1==0, 128%2==0, 128%8==0。
還有,自除數(shù)不允許包含 0 。
給定上邊界和下邊界數(shù)字,輸出一個(gè)列表,列表的元素是邊界(含邊界)內(nèi)所有的自除數(shù)。
示例 1:
輸入: 上邊界left = 1, 下邊界right = 22 輸出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]注意:
每個(gè)輸入?yún)?shù)的邊界滿足?1<=left<=right<=10000。
貢獻(xiàn)者: LeetCode
題目難度: Easy
通過率: 70.20%
相關(guān)話題
數(shù)學(xué)
https://leetcode.com/tag/math
相似題目
完美數(shù)
https://leetcode-cn.com/problems/perfect-number/?難度:?簡(jiǎn)單
解題思路:
設(shè)計(jì)一個(gè)判斷單個(gè)數(shù)是否是自除數(shù)的函數(shù),比如取名為 IsSelfDIv()
IsSelfDIv函數(shù)的要點(diǎn)是:
排除數(shù)位中含有0的數(shù)
排除原數(shù)不是末位數(shù)字倍數(shù)的數(shù)
遍歷原數(shù)列,對(duì)每一個(gè)數(shù)調(diào)用一次進(jìn)行 IsSelfDIv 函數(shù),將滿足要求的加入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) // 原數(shù)不是末位數(shù)字倍數(shù)的數(shù)需要排除 return false; t /= 10; } return true; } }運(yùn)行結(jié)果:
執(zhí)行用時(shí): 244ms, 在所有 csharp 提交中擊敗了 100.00%的用戶
相應(yīng)的,如需測(cè)試,本地可執(zhí)行的代碼為:
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) // 原數(shù)不是末位數(shù)字倍數(shù)的數(shù)需要排除 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); } } }相應(yīng)代碼已經(jīng)上傳到github:
https://github.com/yanglr/Leetcode-CSharp/tree/master/leetcode728
End
作者簡(jiǎn)介:Bravo Yeung,計(jì)算機(jī)碩士,知乎干貨答主(獲81K?贊同,?37K?感謝,?234K?收藏)。曾在國(guó)內(nèi) Top3互聯(lián)網(wǎng)視頻直播公司短暫工作過,后加入一家外企做軟件開發(fā)至今。
歡迎各位讀者加入?.NET技術(shù)交流群,在公眾號(hào)后臺(tái)回復(fù)“加群”或者“學(xué)習(xí)”即可。
文末彩蛋微信后臺(tái)回復(fù)“asp”,給你:一份全網(wǎng)最強(qiáng)的ASP.NET學(xué)習(xí)路線圖。
回復(fù)“cs”,給你:一整套 C# 和 WPF 學(xué)習(xí)資源!
回復(fù)“core”,給你:2019年dotConf大會(huì)上發(fā)布的.NET core 3.0學(xué)習(xí)視頻!
朕已閱?
總結(jié)
以上是生活随笔為你收集整理的C#刷遍Leetcode面试题系列连载(3): No.728 - 自除数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一键分享博客或新闻到Teams好友或频道
- 下一篇: 【.NET Core 3.0】框架之十二