No.12, Integer to Roman,将一个int数转换为罗马数字(范围为1-3999)。
No.13, Roman to Integer,将罗马数字转换为int(范围为1-3999)。
这题没什么难度,主要是理解罗马数字的规则。
在罗马数字中:
1~9: {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
10~90: {"X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
100~900: {"C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
1000~3000: {"M", "MM", "MMM"}
第12题只需要将每一位的数字抽出来转换为罗马数字即可。
public String intToRoman(int num) { String result=""; String[][] roman = { {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}, {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}, {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}, {"", "M", "MM", "MMM"} }; int i=0; while(num!=0){ int number=num%10; result=roman[i][number]+result; i++; num/=10; } return result; }
当然还有更漂亮的代码
public static String intToRoman(int num) { String M[] = {"", "M", "MM", "MMM"}; String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}; String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}; String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}; return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10]; }
这道题的解题方法还有很多,例如在罗马数字中,可以拆分为IVXCMD等罗马数字单元来算。
第13题,主要是注意IV VI这样的情况即可,如果小数在前说明是减。
public class Solution { public int romanToInt(String s) { int result=0; for(int i=0;i<s.length()-1;i++){ int n=toNumber(s.charAt(i)); if(n<toNumber(s.charAt(i+1))){ result-=n; } else result+=n; } result+=toNumber(s.charAt(s.length()-1)); return result; } public int toNumber(char c){ switch (c){ case 'I':return 1; case 'V':return 5; case 'X':return 10; case 'L':return 50; case 'C':return 100; case 'D':return 500; case 'M':return 1000; } return 0; } }