Integer to Roman -- LeetCode

来源:互联网 发布:windows更新过程中关闭 编辑:程序博客网 时间:2024/05/17 18:25

  原题链接: http://oj.leetcode.com/problems/integer-to-roman/

  这道题比较简单,只要搞清楚每个数字在每个位置应该如何表示就可以,罗马数字对于每个位有三个单位:1,5,10,对于1到9,表示方法如下:

  1-3:用1表示;

  4:1:5左边加一个1;

  5: 直接用5表示;

  6-8: 5右边加相应的1;

  9: 10左边加一个1。

  以下的代码用一个函数来对某一个位用相应的1,5,10进行转换,然后求出每一位依次转换得到结果,因为知道不会超过4000,所以直接求4位出来,算法时间复杂度是O(整数的位数),空间复杂度是O(1)。 代码如下:[java] view plaincopy

  

在CODE上查看代码片

  

派生到我的代码片

  public String intToRoman(int num) {

  //I 1

  //V 5

  //X 10

  //L 50

  //C 100

  //D 500

  //M 1,000

  if(num<1 || num>3999)

  return "";

  int digit = 1000;

  ArrayList digits = new ArrayList();

  while(digit>0)

  {

  digits.add(num/digit);

  num %= digit;

  digit /= 10;

  }

  StringBuilder res = new StringBuilder();

  res.append(convert(digits.get(0),'M',' ', ' '));

  res.append(convert(digits.get(1),'C','D', 'M'));

  res.append(convert(digits.get(2),'X','L', 'C'));

  res.append(convert(digits.get(3),'I','V', 'X'));

  return res.toString();

  }

  public String convert(int digit, char one, char five, char ten)

  {

  StringBuilder res = new StringBuilder();

  switch(digit)

  {

  case 9:

  res.append(one);

  res.append(ten);

  break;

  case 8:

  case 7:

  case 6:

  case 5:

  res.append(five);

  for(int i=5;i

  res.append(one);

  break;

  case 4:

  res.append(one);

  res.append(five);

  break;

  case 3:

  case 2:

  case 1:

  for(int i=0;i

  res.append(one);

  break;

  default:

  break;

  }

  return res.toString();

  }

  题目思路很简单,主要就是考察一下对于整数和字符串的操作,属于比较基本的题目。奂)

0 0
原创粉丝点击