由“吸血鬼数字”引起的关于算法的思考

今天看Thing in java的第四章有个小练习是找出4位数的全部吸血鬼数字( 一个4位数字,能够拆分2个2位数数字的乘积,顺序不限。)本身写了个递归的实现,虽然是正确的,但感受不满意,效率过低了。大二暑假时也是努力学了了3个多月的算法,什么动态规划,剪枝搜索,图论,ac自动机也是随手拿来,也是做为学校的一个队员拿到省程序设计大赛的三等奖。后来学javaee,android不多用到算法渐渐淡忘,到如今大三都快忘光了。网上搜了下,找到了吸血鬼数字的一个高效率的实现html

import java.util.Arrays;

public class VampireNum {
  public static void main(String[] arg) {
    String[] ar_str1, ar_str2;
    int sum = 0;
    int from;
    int to;
    int i_val;
    int count = 0;
    // 对i和j的双重循环,用到剪枝
    for (int i = 10; i < 100; i++) {
      // j=i+1避免重复
      from = Math.max(1000 / i, i + 1);
      to = Math.min(10000 / i, 100);
      for (int j = from; j < to; j++) {
        i_val = i * j;
        if (i_val % 100 == 0 || (i_val - i - j) % 9 != 0) {
          continue;
        }
        count++;
        ar_str1 = String.valueOf(i_val).split("");
        ar_str2 = (String.valueOf(i) + String.valueOf(j)).split("");
        Arrays.sort(ar_str1);
        Arrays.sort(ar_str2);
        if (Arrays.equals(ar_str1, ar_str2)) {// 排序后比较,为真则找到一组
          sum++;
          System.out.println("第" + sum + "组: " + i + "*" + j + "=" + i_val);
        }
      }
    }
    System.out.println("共找到" + sum + "组吸血鬼数");
    System.out.println(count);
  }
}


由于有基础,看仍是很容易看懂的,也再次感觉到算法的魅力,加上最近看了篇一个大神学习算法之路(个人算法学习之路)和面试经历(9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路),又让我提起对算法的强烈兴趣。关于算法在开发有用与否的讨论也是看过很多。本身以为由于在不一样的领域不一样的高度对算法的使用和态度确定因人而异。java

我是以为算法仍是挺至关有用的,不少小算法在项目也是常常用到,不少时候不是用不到算法,而是由于不知道因此采用通常的实现方法。并且不少面试也是关于算法,对于之后找工做面试也是颇有帮助的,嘿嘿。也是决定在学习之余时常花时间重拾算法。android

(最近刚开始写博客,语言组织和技术哪里不妥你们多给点意见,助我快速成长^_^)面试

相关文章
相关标签/搜索