前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#刷遍Leetcode面试题系列连载(3): No.728 - 自除数

C#刷遍Leetcode面试题系列连载(3): No.728 - 自除数

作者头像
Enjoy233
发布2021-12-23 15:30:15
4840
发布2021-12-23 15:30:15
举报

前言

前文传送门:

C# 刷遍 Leetcode 面试题系列连载(1) - 入门与工具简介

C#刷遍Leetcode面试题系列连载(2): No.38 - 报数

上篇文章中我们分析了一个递归描述的字符串问题,今天我们来分析一个数学问题,一道除法相关的面试题。

今天要给大家分析的面试题是 LeetCode 上第 728 号问题,

LeetCode - 728. 自除数

https://leetcode-cn.com/problems/self-dividing-numbers/

题目描述

自除数 是指可以被它包含的每一位数除尽的数。

例如,128 是一个自除数,因为 128%1==0128%2==0128%8==0

还有,自除数不允许包含 0 。

给定上边界和下边界数字,输出一个列表,列表的元素是边界(含边界)内所有的自除数。

示例 1:

代码语言:javascript
复制
输入: 
上边界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的代码为:

代码语言:javascript
复制
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%的用户

相应的,如需测试,本地可执行的代码为:

代码语言:javascript
复制
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互联网视频直播公司短暂工作过,后加入一家外企做软件开发至今。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大白技术控 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档