leetcode12——整數轉羅馬數字——java實現

題目描述
在這裏插入圖片描述
在這裏插入圖片描述
解題思路
代碼中返回的類型是String類型,轉成的羅馬數字是一個一個累上去的。
如:1994,是由1000(M),900(CM),90(XC),4(IV),累上去的。
由於返回的類型是String類型,並且又是累上去的,就想到用StringBuilder的append()方法,到了最後用toString()方法來return即可。

接着,題目中給出了一些特殊的數字,這些數字分別爲:
1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1
將它們當作key,那麼,它們所對應的value即爲:
“M”, “CM”, “D”, “CD”, “C”, “XC”, “L”, “XL”, “X”, “IX”, “V”, “IV”, “I”
當然這裏不用HashMap去做,在這裏,分別用一個int型數組和一個String類型的數組來對key和value進行存放。

接下來對key數組進行遍歷,用num來除以當前的key值,如果相除所得到的商不爲0(在這裏,只能爲1或2或3,因爲數字不超過3999),則對這個商的值進行循環,每次遞減1。在該循環當中,將所對應的羅馬數值給append上去即可。例如:當該商的值爲2,並且此時數組key的值指向key[0],則所對應的羅馬數字爲MM;如果商的值爲3,則所對應的羅馬數字爲MMM。
還有一點就是,做過一次運算之後,num值也要改變。

詳細代碼

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

這個代碼消耗內存太大了,說明這個方法並不是特別好,到時候去看看別人的解題方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章