• [Leetcode]Integer to Roman&Roman to Integer随记


    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;
        }
    }
  • 相关阅读:
    MySQL-基础知识整理
    设计模式-适配器模式
    MySQL
    MySQL-5.7 填坑
    MySQL
    Oracle
    SQL 注入
    Apache JMeter
    AppScan
    DNS 搜索
  • 原文地址:https://www.cnblogs.com/lilylee/p/5220370.html
Copyright © 2020-2023  润新知