C#LeetCode刷题之#728-自除数(Self Dividing Numbers)
问题
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 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种算法的时间复杂度均为: 。
最新文章
- Git(进击学习:远程仓库操作)-V3.0
- 速战速决 (4) - PHP: 类基础, 抽象类, 接口, trait
- EntityFrameWork关系映射
- Ubuntu16.04/windows7修改本地hosts文件
- 前端新人学习笔记-------html/css/js基础知识点(三)
- java 实例方法和类方法的区别
- opencv 相关一个很好的博客
- python爬虫 模拟登陆校园网-初级
- QA: 自闭合标签要不要手动闭合?
- JavaScript进阶(七)JS截取字符串substr 和 substring方法的区别
- centos 7 下 Ceph 配置安装
- 【Python】【Web.py】详细解读Python的web.py框架下的application.py模块
- Oracle 表备份还原
- [BZOJ4592][SHOI2015]脑洞治疗仪(线段树)
- 编程开发之--Oracle数据库--存储过程和存储函数(2)
- 设置tomcat配置文件,在Myeclipse中修改jsp文件之后不用重启tomcat
- cglib动态代理(需导入cglib-nodep-2.1_3.jar)
- MySQL优化之表结构优化的5大建议
- Service启动流程
- Flask中那些特殊的装饰器