程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Integer to Roman -- LeetCode

Integer to Roman -- LeetCode

編輯:C++入門知識

原題鏈接: 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)。 代碼如下:

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題目思路很簡單,主要就是考察一下對於整數和字符串的操作,屬於比較基本的題目。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved