12. Integer to Roman

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

1刷
題解:
數(shù)值計算的題目,需要了解羅馬數(shù)字的規(guī)律。
Time Complexity - O(n), Space Complexity - O(n)

public class Solution {
    public String intToRoman(int num) {
        //Roman:   I = 1,  V = 5,   X = 10,   L = 50,   C = 100,  D = 500,  M = 1000 
        if(num<=0) return "";
        StringBuilder res = new StringBuilder();
        String[] symbol = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        int [] value = {1000,900,500,400, 100, 90,  50, 40,  10, 9,   5,  4,   1};
        for(int i=0; num>0; i++){
            while(num>=value[i]){
                num-=value[i];
                res.append(symbol[i]);
            }
        }
        return res.toString();
    }
}

由于在submit時出現(xiàn)了time exceed,于是試試binary search

public class Solution {
    public String intToRoman(int num) {
        //Roman:   I = 1,  V = 5,   X = 10,   L = 50,   C = 100,  D = 500,  M = 1000 
        if(num<=0) return "";
        StringBuilder res = new StringBuilder();
        String[] symbol = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        int [] value = {1000,900,500,400, 100, 90,  50, 40,  10, 9,   5,  4,   1};
        while(num>0){
            int indice = binarySearch(num, value, 0, value.length);
            res.append(symbol[indice]);
            num -= value[indice];
        }
        return res.toString();
    }
    
    int binarySearch(int num, int[] value, int start, int end){
        int median = 0;
        while(start<=end){
            median = start + (end - start)/2;
            if(value[median] > num){
                start = median + 1;
            }
            else if(value[median] < num) end = median - 1;
            else return median;
        }
        
        median = value[median] > num? median+1:median;
        return median;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容