由「吸血鬼數字」引起的關於算法的思考

今天看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

(最近剛開始寫博客,語言組織和技術哪裏不妥你們多給點意見,助我快速成長^_^)面試

相關文章
相關標籤/搜索