zoukankan      html  css  js  c++  java
  • 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:

    输入: 
    上边界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的代码为:

    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学习视频!

  • 相关阅读:
    [JLOI2011] 飞行路线
    高精度运算模板
    Dijkstra算法模板
    [SDOI2010] 外星千足虫
    [SDOI2006] 线性方程组
    [CTSC2014] 企鹅QQ
    模板三连击:树状数组+线段树+主席树
    [ZJOI2008] 树的统计
    [国家集训队] 礼物
    [洛谷P4720] [模板] 扩展卢卡斯
  • 原文地址:https://www.cnblogs.com/enjoy233/p/csharp_leetcode_series_3.html
Copyright © 2011-2022 走看看