问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3889 访问。

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

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

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

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

输入: 上边界left = 1, 下边界right = 22

输出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]

注意:每个输入参数的边界满足 1 <= left <= right <= 10000。


A self-dividing number is a number that is divisible by every digit it contains.

For example, 128 is a self-dividing number because 128 % 1 == 0, 128 % 2 == 0, and 128 % 8 == 0.

Also, a self-dividing number is not allowed to contain the digit zero.

Given a lower and upper number bound, output a list of every possible self dividing number, including the bounds if possible.

Input: left = 1, right = 22

Output: [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]

Note:The boundaries of each input argument are 1 <= left <= right <= 10000.


示例

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3889 访问。

public class Program {

    public static void Main(string[] args) {
var left = 1;
var right = 21; var res = SelfDividingNumbers(left, right);
ShowArray(res); left = 3;
right = 36; res = SelfDividingNumbers2(left, right);
ShowArray(res); Console.ReadKey();
} private static void ShowArray(IList<int> array) {
foreach(var num in array) {
Console.Write($"{num} ");
}
Console.WriteLine();
} private static IList<int> SelfDividingNumbers(int left, int right) {
var res = new List<int>();
for(var i = left; i <= right; i++) {
if(IsSelfDividingNumber(i)) res.Add(i);
}
return res;
} private static bool IsSelfDividingNumber(int num) {
//用字符串索引取位
var length = num.ToString().Length;
for(var i = 0; i < length; i++) {
var bit = int.Parse(num.ToString()[length - i - 1].ToString());
if(bit == 0 || num % bit != 0) return false;
}
return true;
} private static IList<int> SelfDividingNumbers2(int left, int right) {
var res = new List<int>();
for(var i = left; i <= right; i++) {
if(IsSelfDividingNumber2(i)) res.Add(i);
}
return res;
} private static bool IsSelfDividingNumber2(int num) {
//用传统取余式取位
var number = num;
while(number > 0) {
var bit = number % 10;
if(bit == 0 || num % bit != 0) return false;
number /= 10;
}
return true;
} }

以上给出2种算法实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/3889 访问。

1 2 3 4 5 6 7 8 9 11 12 15
3 4 5 6 7 8 9 11 12 15 22 24 33 36

分析:

显而易见,以上2种算法的时间复杂度均为: 

最新文章

  1. Git(进击学习:远程仓库操作)-V3.0
  2. 速战速决 (4) - PHP: 类基础, 抽象类, 接口, trait
  3. EntityFrameWork关系映射
  4. Ubuntu16.04/windows7修改本地hosts文件
  5. 前端新人学习笔记-------html/css/js基础知识点(三)
  6. java 实例方法和类方法的区别
  7. opencv 相关一个很好的博客
  8. python爬虫 模拟登陆校园网-初级
  9. QA: 自闭合标签要不要手动闭合?
  10. JavaScript进阶(七)JS截取字符串substr 和 substring方法的区别
  11. centos 7 下 Ceph 配置安装
  12. 【Python】【Web.py】详细解读Python的web.py框架下的application.py模块
  13. Oracle 表备份还原
  14. [BZOJ4592][SHOI2015]脑洞治疗仪(线段树)
  15. 编程开发之--Oracle数据库--存储过程和存储函数(2)
  16. 设置tomcat配置文件,在Myeclipse中修改jsp文件之后不用重启tomcat
  17. cglib动态代理(需导入cglib-nodep-2.1_3.jar)
  18. MySQL优化之表结构优化的5大建议
  19. Service启动流程
  20. Flask中那些特殊的装饰器

热门文章

  1. P1050 精卫填海
  2. 重磅分享:美团点评架构师私藏的内部Linux运维笔记
  3. Markdown与LaTex使用语法整合
  4. 【揭秘】C语言类型转换时发生了什么?
  5. C++语法小记---类型转换
  6. Java之枚举类
  7. 完美解决pycharm 不显示代码提示问题
  8. flask下直接展示mysql数据库 字段
  9. 一个使用android相机的例子,二维码必须用相机
  10. 【Laravel】为Eloquent 模型设置全局作用域和局部作用域进行查询