leetcodeタイトルブラシ12(整数のローマ数字)

件名の説明:

次の7つを含むローマ数字文字:I、V、X、L、C、D及びM.

数字
I. 1
V. 5
X-10
L 50
C 100
D 500
M 1000は
、例えば、2 IIローマ数字として書き込まれ、すなわち1.12、すなわちX + II、二つの平行XIIのように書きます。図27は、XXVII、即ちXX + V + IIのように書きます。

一般的に、大量に右にローマ数字の数が少ないです。しかし、例外もある、例えば、4 IIIIを書きますが、IVはありません。左番号5番号1において、多数の数が4を得た少ない数5で表される値に等しいです。同様に、数9は、IXで表されます。この特別なルールは以下の6つのケースにのみ適用されます。

私は、左V(5)とX(10)上にあってもよく、及び4,9を表現します。
X Lは、左(50)及びC(100)上に配置することができ、そして40と90が示されています。 
Cは、400と900表すために、左側にD(500)とM(1000)上に配置することができます。
整数を考えると、ローマ数字に変換します。入力は3999から1の範囲にあることを保証します。

例1:

入力:3
出力: "III"
例2:

入力:4
出力: "IV"
の例3:

入力:9
出力: "IX"
例4:

入力:58
出力: "LVIII"
説明:L = 50、V = 5 、III = 3
実施例5:

入力:1994
出力: "MCMXCIV"
説明:M = 1000、CM = 900 、XC = 90、IV = 4。

StringクラスとStringBuilderクラスの違い:

文字列自体は、新しいオブジェクトがシステムの性能に影響を与える新しいオブジェクト、新しいオブジェクトに、元のオブジェクト参照、及び各時間を生成する、各時刻の内容が変更され、一度しか割り当てることができ、不変であり、これは、.NETコンパイラの効率が低下します。

StringBuilderクラスは、各操作は、その操作に変更の多くを行う、代わりに新しいオブジェクトを生成し、そのフットプリントが増加し、コンテンツを拡大するのは、オブジェクト自体をしません動作させることである、異なっていますシステムのパフォーマンスに影響を与える匿名オブジェクトの多くを生成します。

その答えによって:

class Solution {     //贪心算法
    public String intToRoman(int num) {
        int[] nums={1000,900,500,400,100,90,50,40,10,9,5,4,1};     //将特殊数字与其罗马字符对应
        String[] rom={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        StringBuilder str=new StringBuilder();   
        int index=0;
        while(index<13){
            while(num>=nums[index]){
                str.append(rom[index]);
                num-=nums[index];      //从大到小开始减
            }
            index++;
        }
        return str.toString();     //返回一个以字符串表示的str对象
    }
}

 

公開された88元の記事 ウォン称賛10 ビュー2549

おすすめ

転載: blog.csdn.net/ZhangShaoYan111/article/details/104580249
おすすめ