LeetCode第13題ローマ数字回転整数(Roman to Integer)
11970 ワード
文書ディレクトリタイトルアドレス タイトル説明 コード実装 タイトルアドレス
タイトルアドレスhttps://leetcode-cn.com/problems/roman-to-integer/
タイトルの説明
ローマ数字には、I、V、X、L、C、D、Mの7文字が含まれています.
例えば、ローマ数字2はIIと書かれており、2つの並列の1である.12はXIIと書きます.つまりX+IIです.27 XXVIIと書くと、XX+V+IIとなります.
通常、ローマ数字の中で小さい数字は大きな数字の右側にあります.しかし、例えば4はIIIではなくIVと書くという特例もある.数字1は数字5の左側にあり、表す数は大数5から小数1を減らした数値4に等しい.同様に、数字9はIXとして表される.この特殊なルールは、次の6つの場合にのみ適用されます. Iは、V(5)およびX(10)の左側に配置され、4および9を表すことができる. Xは、L(50)およびC(100)の左側に配置され、40および90を表すことができる. Cは、D(500)およびM(1000)の左側に配置され、400および900を表すことができる.
ローマ数字を指定し、整数に変換します.入力は1~3999の範囲であることを確認します.
例1:
例2:
例3:
例4:
例5:
コード実装
答えはhttps://leetcode-cn.com/problems/roman-to-integer/solution/hua-jie-suan-fa-13-luo-ma-shu-zi-zhuan-zheng-shu-b/
構想は、まず、すべての組合せ可能性をハッシュテーブルにリストし、追加する はその後、文字列を巡回する.組み合わせは2つしかないため、1つは1文字、1つは2文字であり、そのうち2つの文字は1文字 より優先する.は、2文字の組合せがハッシュテーブルに存在するか否かを判断し、存在する場合は結果ansに値を取り出し、2文字後ろにシフトする.存在しない場合は現在の1文字が存在するか否かを判断し、存在する場合は結果ansに値を取り出し、1文字 を後ろに移動する.ループ終了戻り結果ans コード#コード#
Java
タイトルアドレスhttps://leetcode-cn.com/problems/roman-to-integer/
タイトルの説明
ローマ数字には、I、V、X、L、C、D、Mの7文字が含まれています.
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例えば、ローマ数字2はIIと書かれており、2つの並列の1である.12はXIIと書きます.つまりX+IIです.27 XXVIIと書くと、XX+V+IIとなります.
通常、ローマ数字の中で小さい数字は大きな数字の右側にあります.しかし、例えば4はIIIではなくIVと書くという特例もある.数字1は数字5の左側にあり、表す数は大数5から小数1を減らした数値4に等しい.同様に、数字9はIXとして表される.この特殊なルールは、次の6つの場合にのみ適用されます.
ローマ数字を指定し、整数に変換します.入力は1~3999の範囲であることを確認します.
例1:
: "III"
: 3
例2:
: "IV"
: 4
例3:
: "IX"
: 9
例4:
: "LVIII"
: 58
: L = 50, V= 5, III = 3.
例5:
: "MCMXCIV"
: 1994
: M = 1000, CM = 900, XC = 90, IV = 4.
コード実装
答えはhttps://leetcode-cn.com/problems/roman-to-integer/solution/hua-jie-suan-fa-13-luo-ma-shu-zi-zhuan-zheng-shu-b/
構想
Java
class Solution {
public int romanToInt(String s) {
Map<String, Integer> map = new HashMap<>();
map.put("I", 1);
map.put("IV", 4);
map.put("V", 5);
map.put("IX", 9);
map.put("X", 10);
map.put("XL", 40);
map.put("L", 50);
map.put("XC", 90);
map.put("C", 100);
map.put("CD", 400);
map.put("D", 500);
map.put("CM", 900);
map.put("M", 1000);
int ans = 0;
for(int i = 0;i < s.length();) {
if(i + 1 < s.length() && map.containsKey(s.substring(i, i+2))) {
ans += map.get(s.substring(i, i+2));
i += 2;
} else {
ans += map.get(s.substring(i, i+1));
i ++;
}
}
return ans;
}
}