首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode Integer to Roman 整數轉羅馬數字 (查表法)

     編輯:關於C++

問題

將 1~3999 整數轉為羅馬數字。羅馬數字規則:I=1, V=5, X=10, L=50, C=100, D=500, M=1000。特殊組合:IV=4, IX=9, XL=40, XC=90, CD=400, CM=900。

查表法

建立值與符號對應表,按值從大到小貪心減去:

class Solution {
public:
    string intToRoman(int num) {
        vector vals = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
        vector syms = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        string res;
        for (int i = 0; i < 13; ++i) {
            while (num >= vals[i]) {
                num -= vals[i];
                res += syms[i];
            }
        }
        return res;
    }
};

原理

羅馬數字本質是「減法表示法」的貪心展開。包含 900,400,90,40,9,4 等特殊值可自動處理 IV, IX 等情況,無需複雜條件判斷。

複雜度

O(1) 時間 (循環固定 13 次),O(1) 空間。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved