12. Integer to Roman 13. Roman to Integer

来源:互联网 发布:美工技巧 编辑:程序博客网 时间:2024/05/16 03:27

Integer to Roman  

分别计算每一位上的罗马数字。

public class Solution {
    public static String intToRoman(int num) {
     int[] digit=new int[]{0,0,0,0};
        String[] R=new String[]{"M","D","C","L","X","V","I"};
        String Roman="";
        for(int i=3;i>=0;i--){
        digit[i]=num%10;
        num=num/10;
        }
        StringBuilder sb = new StringBuilder();
        if(digit[0]>0){
        for(int i=0;i<digit[0];i++){
        sb.append("M");
        }
        }


      for(int j=1;j<4;j++){
     if(digit[j]>=9){
     sb.append(R[2*j]).append(R[2*j-2]);
          }
          else{
          if(digit[j]>=5){
          sb.append(R[2*j-1]);
          for(int i=0;i<digit[j]-5;i++){
          sb.append(R[2*j]);        
          }
          }
          else{
          if(digit[j]==4){
          sb.append(R[2*j]).append(R[2*j-1]);        
          }
          else{
          if(digit[j]>0){
             sb.append(R[2*j]); 
          for(int i=0;i<digit[j]-1;i++)
          sb.append(R[2*j]);      
          }
          }
          }
          }
      }
        return sb.toString();
    }

}

Roman to integer:

倒过来比较相邻字符代表的大小。

public class Solution {
    public int romanToInt(String s) {
        HashMap<Character, Integer> map = new HashMap<>();
        map.put('I', 1);
        map.put('V', 5);
        map.put('X', 10);
        map.put('L', 50);
        map.put('C', 100);
        map.put('D', 500);
        map.put('M', 1000);


        int len = s.length();
        int res = map.get(s.charAt(s.length() -1));


        for(int i = s.length() -2; i >= 0 ; i--){
            if(map.get(s.charAt(i)) >= map.get(s.charAt(i+1))){
                res += map.get(s.charAt(i));
            }
            else{            
                res -= map.get(s.charAt(i));
            }
        }
        return res;
    }
}

0 0
原创粉丝点击