前提
最近公司没有什么事情可做,同事顺便再研究数据结构和算法这块的知识。临近下班的时候给我发一道算法题。计算出4位数中所有的吸血鬼数字。题目如下:
分析题目:
- 位数为偶数,2位
- 4位数中包含两个2位数的乘数(可以是无序的)
- 两个0结尾的数字是不允许的
结论:
两个2位数相乘得到一个4位数,并且两个2位数的字符无序组合可以得到这个4位数。以两个0结尾的数是不允许的。
实现思路
- 1.四位数的字符拆分、两两组合相乘,得到的乘积等于这个四位数既是吸血鬼数字
- 2.两个两位数相乘,得到一个四位数。两个两位数的字符串进行相加排序。四位数也进行排序,如果排序后的两个字符串相等,既是吸血鬼数字。
两数组合
大致实现:
for(int i=1000;i<=9999;i++){ |
结果展示:
21*60=1260 |
排序比较
大致实现:
for(int i=10;i<100;i++){ |
结果展示:
15*93=1395 |
后续遐想
实现上是按照题目的需求来做的、不够灵活。在某些设计上都写死了,比如位数是4位(1000~9999),判断条件值都写死了。假如题目说求6位数中的吸血鬼数据,代码结构或者条件变量都会做出一定的改造,没有可扩展性。写代码不能为了一时之需,而不考虑后续扩展性,可复用性等。谨记!!!!