LeetCode-Integer to Roman
Integer to Roman
##题目
####Integer to Roman
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
##解题思路
该题是将整数变为罗马数字,主要考虑的是字符串操作。需要注意的数字和罗马数字的对应关系。
罗马数字为以下表示形式:
  I    1
  V    5
  X    10
  L    50
  C    100
  D    500
  M    1,000
  罗马数字对于每个位有三个单位:1,5,10,对于1到9,表示方法如下:
  1-3:用1表示;
  4: 5左边加一个1;
  5: 直接用5表示; 
  6-8: 5右边加相应的1;
  9: 10左边加一个1。
##算法代码
代码采用JAVA实现:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56public class Solution {
	/*
	  I	1
      V	5
      X	10
      L	50
      C	100
      D	500
      M	1,000
      罗马数字对于每个位有三个单位:1,5,10,对于1到9,表示方法如下:
	  1-3:用1表示;
	  4: 5左边加一个1;
	  5: 直接用5表示; 
	  6-8: 5右边加相应的1;
	  9: 10左边加一个1。
	*/
    public String intToRoman(int num) {
        if(num<0||num>3999) return "";
        int dev=1000;
        ArrayList<Integer> list=new ArrayList<Integer>();
        while(dev>0)
        {
        	list.add(num/dev);
        	num=num%dev;
        	dev=dev/10;
        }
        //从千位开始,对每一位进行转换,但是每一位对应的罗马数字也有范围
        String result="";
        result+=convert(list.get(0),'M',' ',' ');
        result+=convert(list.get(1),'C','D','M');
        result+=convert(list.get(2),'X','L','C');
        result+=convert(list.get(3),'I','V','X');
        return result;
    }
    public String convert(int num,char c1,char c5,char c10)
    {
    	String s="";
    	switch(num)
    	{
    		case 9:{s+=c1;s+=c10;break;}
    		case 8:{s+=c5;s+=c1;s+=c1;s+=c1;break;}
    		case 7:{s+=c5;s+=c1;s+=c1;break;}
    		case 6:{s+=c5;s+=c1;break;}
    		case 5:{s+=c5;break;}
    		case 4:{s+=c1;s+=c5;break;}
    		case 3:{s+=c1;s+=c1;s+=c1;break;}
    		case 2:{s+=c1;s+=c1;break;}
    		case 1:{s+=c1;break;}
    		default:break;
    	}
    	return s;
    }
}