|
1 | 1 | package com.anas.easy;
|
2 | | - |
3 | 2 | public class RomanToInteger {
|
4 | 3 | public int romanToInt(String s) {
|
5 | 4 | int num = 0;
|
6 | 5 | s = s.toLowerCase();
|
7 | 6 | for (int i = 0; i < s.length(); i++) {
|
8 | | - switch (s.charAt(i)) { |
9 | | - case 'i' -> num++; |
10 | | - case 'v' -> num += v(s, i); |
11 | | - case 'x' -> num += x(s, i); |
12 | | - case 'l' -> num += 50; |
13 | | - case 'c' -> num += 100; |
14 | | - case 'd' -> num += 500; |
15 | | - case 'm' -> num += 1000; |
16 | | - } |
| 7 | + num += getNum(s, i); |
17 | 8 | }
|
18 | 9 | return num;
|
19 | 10 | }
|
20 | 11 |
|
21 | | - private int x(String s, int i) { |
22 | | - if (i != 0 && s.charAt(i) ==) |
| 12 | + private int getNum(String s, int i) { |
| 13 | + int returnVal = getIntNum(s.charAt(i)); |
| 14 | + if (i != 0) { |
| 15 | + short currenNum = (short) returnVal; |
| 16 | + short prevNum = getIntNum(s.charAt(i - 1)); |
| 17 | + if (currenNum > prevNum) { |
| 18 | + returnVal = 0; |
| 19 | + returnVal -= prevNum; |
| 20 | + returnVal += (currenNum - prevNum); |
| 21 | + } |
| 22 | + } |
| 23 | + return returnVal; |
| 24 | + } |
| 25 | + |
| 26 | + private short getIntNum(char charAt) { |
| 27 | + return switch (charAt) { |
| 28 | + case 'v' -> 5; |
| 29 | + case 'x' -> 10; |
| 30 | + case 'l' -> 50; |
| 31 | + case 'c' -> 100; |
| 32 | + case 'd' -> 500; |
| 33 | + case 'm' -> 1000; |
| 34 | + default -> 1; |
| 35 | + }; |
23 | 36 | }
|
24 | 37 |
|
25 | | - private int v(String s, int i) { |
26 | | - if (i != 0 && s.charAt(i - 1) == 'i') |
27 | | - return 4; |
28 | | - else |
29 | | - return 5; |
| 38 | + public static void main(String[] args) { |
| 39 | + System.out.println("MCMXCIV = " + new RomanToInteger().romanToInt("MCMXCIV") ); |
30 | 40 | }
|
31 | 41 | }
|
0 commit comments