Integer to rome

。題目假設

給一個整數轉換成羅馬數字

。重要問題

要如何有效的轉換,因為羅馬數字的 4, 9 開頭要特別處理

。直覺

從最小位開始將數字分離,再看看數字是多少,然後append 到 StringBuilder 上

。解決方法可行性

照著直覺做有個問題,還要判斷現在這位是個位、十位、還是百位,還要判斷 1, 4, 5, 9的關係,

寫下去會非常長一大串,一定有更好的解法

正面想不出來就反面想!

。解決方案

一個數字,如果有最大可以表示,那輪不到比她小的,像是 949 ,一定是 900 先輸出,輪不到500 or 400

這樣想的話,那可以用減的,從1000開始減,可以減的話就輸出對應的羅馬數字

。資料結構

一維陣列

。複雜度

O(n)

。遇到的困難點、想錯的地方

public String intToRoman(int num) {
    if (num <= 0) {
        return "";
    }

    int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
    String[] strs = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};                       

    StringBuilder sb = new StringBuilder();
    for (int i=0; i<values.length; i++) {
        while (num >= values[i]) {
            num -= values[i];
            sb.append(strs[i]);
        }
    }
    return sb.toString();
}

results matching ""

    No results matching ""