您的位置:首页 > 编程语言 > Java开发

java编程思想学习笔记(4)--吸血鬼数字

2017-03-20 11:21 232 查看
今天看Java编程思想第四章时看到吸血鬼数字这道题,自己写了一下,一开始用的是顺着题目的思路想下去的,把一个四位数分解四个个位数,然后对这四个数进行全排列,然后对每一个全排列的结果进行计算,判断是否等于原本的四位数。这样虽然可以得出结果,但是复杂度较大。

后来在网上看到了另一种解法,跟我的思路刚好相反,最终结果都是两位数和两位数相乘,而两位数只有10~99这90个,可以对两位数进行遍历,相乘得到结果后再与之前的两位数进行比较,这样效率会高很多

public class Main {
public static void main(String args[]) {
for (int i = 10; i < 100; i++) {
for (int j = i + 1; j < 100; j++) {   //j=i+1避免重复
int val = i * j;
if (val > 1000&val < 10000 && val % 1000 != 0) {
//将数字转换为String数组,方便后面进行排序
String[] str1=new String("" +i+ j).split("");
String[] str2=new String("" + val).split("");
Arrays.sort(str1);
Arrays.sort(str2);
//排序后如果相等,说明i和j是val中的数
if (Arrays.equals(str1, str2)) {
System.out.println(val +"="+i+"*"+ j);
}
}
}
}
}
}


结果如下:



下面的是网上看到的更高效率的算法

JAVA实现的吸血鬼数字算法,高效率版本(已有网友给出算法说明)

有更好算法的欢迎讨论
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 算法