Commit e7de1ab
committed
12. Integer To Roman
```Solution.c char* intToRoman(int num) { static char res[20]; int val[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; char* sy[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; int i = 0, p = 0; while (num) { while (num >= val[i]) { for (char* s = sy[i]; *s; s++) res[p++] = *s; num -= val[i]; } i++; } res[p] = 0; return res; } ``` ```Solution.cpp class Solution { public: string intToRoman(int num) { vector<pair<int, string>> val = {{1000, "M"}, {900, "CM"}, {500, "D"}, {400, "CD"},{100, "C"}, {90, "XC"}, {50, "L"}, {40, "XL"},{10, "X"}, {9, "IX"}, {5, "V"}, {4, "IV"}, {1, "I"}}; string res = ""; for (auto &[v, s] : val) { while (num >= v) { res += s; num -= v; } } return res; } }; ``` ```Solution.cs public class Solution { public string IntToRoman(int num) { int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; string[] symbols = {"M", "CM", "D", "CD", "C", "XC", "L", "XL","X", "IX", "V", "IV", "I"}; var sb = new StringBuilder(); for (int i = 0; i < values.Length; i++) { while (num >= values[i]) { sb.Append(symbols[i]); num -= values[i]; } } return sb.ToString(); } } ``` ```Solution.dart class Solution { String intToRoman(int num) { List<int> values = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]; List<String> symbols = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]; StringBuffer res = StringBuffer(); for (int i = 0; i < values.length; i++) { while (num >= values[i]) { res.write(symbols[i]); num -= values[i]; } } return res.toString(); } } ``` ```Solution.erl -spec int_to_roman(Num :: integer()) -> unicode:unicode_binary(). int_to_roman(Num) -> int_to_roman(Num, [{1000, <<"M">>}, {900, <<"CM">>}, {500, <<"D">>}, {400, <<"CD">>}, {100, <<"C">>}, {90, <<"XC">>}, {50, <<"L">>}, {40, <<"XL">>}, {10, <<"X">>}, {9, <<"IX">>}, {5, <<"V">>}, {4, <<"IV">>}, {1, <<"I">>}] ). int_to_roman(0, _) -> <<>>; int_to_roman(Num, [{Value, Roman} | Rest]) when Num >= Value -> <<Roman/binary, (int_to_roman(Num - Value, [{Value, Roman} | Rest]))/binary>>; int_to_roman(Num, [_ | Rest]) -> int_to_roman(Num, Rest). ``` ```Solution.ex defmodule Solution do def int_to_roman(num) do values = [{1000, "M"}, {900, "CM"}, {500, "D"}, {400, "CD"}, {100, "C"}, {90, "XC"}, {50, "L"}, {40, "XL"}, {10, "X"}, {9, "IX"}, {5, "V"}, {4, "IV"}, {1, "I"}] Enum.reduce(values, {num, ""}, fn {val, sym}, {n, acc} -> count = div(n, val) {rem(n, val), acc <> String.duplicate(sym, count)} end) |> elem(1) end end ``` ```Solution.go func intToRoman(num int) string { values := []int{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1} symbols := []string{"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"} res := "" for i := 0; i < len(values); i++ { for num >= values[i] { res += symbols[i] num -= values[i] } } return res } ``` ```Solution.java class Solution { public String intToRoman(int num) { int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; String[] symbols = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; StringBuilder sb = new StringBuilder(); for (int i = 0; i < values.length; i++) { while (num >= values[i]) { sb.append(symbols[i]); num -= values[i]; } } return sb.toString(); } } ``` ```Solution.js /** * @param {number} num * @return {string} */ var intToRoman = function(num) { const val = [[1000, 'M'], [900, 'CM'], [500, 'D'], [400, 'CD'], [100, 'C'], [90, 'XC'], [50, 'L'], [40, 'XL'], [10, 'X'], [9, 'IX'], [5, 'V'], [4, 'IV'], [1, 'I']]; let res = ''; for (const [v, s] of val) { while (num >= v) { res += s; num -= v; } } return res; }; ``` ```Solution.kt class Solution { fun intToRoman(num: Int): String { val values = arrayOf(1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1) val symbols = arrayOf("M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I") var n = num val sb = StringBuilder() for (i in values.indices) { while (n >= values[i]) { sb.append(symbols[i]) n -= values[i] } } return sb.toString() } } ``` ```Solution.php class Solution { /** * @param Integer $num * @return String */ function intToRoman($num) { $values = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]; $symbols = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]; $res = ""; for ($i = 0; $i < count($values); $i++) { while ($num >= $values[$i]) { $res .= $symbols[$i]; $num -= $values[$i]; } } return $res; } } ``` ```Solution.py class Solution(object): def intToRoman(self, num): val = [(1000, 'M'), (900, 'CM'), (500, 'D'), (400, 'CD'), (100, 'C'), (90, 'XC'), (50, 'L'), (40, 'XL'), (10, 'X'), (9, 'IX'), (5, 'V'), (4, 'IV'), (1, 'I')] res = '' for v, s in val: while num >= v: res += s num -= v return res ``` ```Solution.rb # @param {Integer} num # @return {String} def int_to_roman(num) val = [[1000, 'M'], [900, 'CM'], [500, 'D'], [400, 'CD'], [100, 'C'], [90, 'XC'], [50, 'L'], [40, 'XL'], [10, 'X'], [9, 'IX'], [5, 'V'], [4, 'IV'], [1, 'I']] res = '' val.each do |v, s| while num >= v res += s num -= v end end res end ``` ```Solution.rkt (define (int-to-roman num) (define pairs '((1000 . "M") (900 . "CM") (500 . "D") (400 . "CD") (100 . "C") (90 . "XC") (50 . "L") (40 . "XL") (10 . "X") (9 . "IX") (5 . "V") (4 . "IV") (1 . "I"))) (define (helper n lst acc) (if (or (zero? n) (null? lst)) acc (let* ((pair (car lst)) (val (car pair)) (sym (cdr pair))) (if (>= n val) (helper (- n val) lst (string-append acc sym)) (helper n (cdr lst) acc))))) (helper num pairs "")) ``` ```Solution.rs impl Solution { pub fn int_to_roman(mut num: i32) -> String { let values = [(1000, "M"), (900, "CM"), (500, "D"), (400, "CD"), (100, "C"), (90, "XC"), (50, "L"), (40, "XL"), (10, "X"), (9, "IX"), (5, "V"), (4, "IV"), (1, "I")]; let mut result = String::new(); for &(val, sym) in values.iter() { while num >= val { result.push_str(sym); num -= val; } } result } } ``` ```Solution.scala object Solution { def intToRoman(num: Int): String = { val values = List(1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1) val symbols = List("M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I") var n = num val sb = new StringBuilder for (i <- values.indices) { while (n >= values(i)) { sb.append(symbols(i)) n -= values(i) } } sb.toString } } ``` ```Solution.swift class Solution { func intToRoman(_ num: Int) -> String { let values = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1] let symbols = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"] var num = num var result = "" for (i, value) in values.enumerated() { while num >= value { result += symbols[i] num -= value } } return result } } ``` ```Solution.ts function intToRoman(num: number): string { const val: [number, string][] = [[1000, 'M'], [900, 'CM'], [500, 'D'], [400, 'CD'], [100, 'C'], [90, 'XC'], [50, 'L'], [40, 'XL'], [10, 'X'], [9, 'IX'], [5, 'V'], [4, 'IV'], [1, 'I']]; let res = ''; for (const [v, s] of val) { while (num >= v) { res += s; num -= v; } } return res; } ```1 parent 5871d7e commit e7de1ab
File tree
19 files changed
+300
-0
lines changed- sol/solution/0001-0100/0012
19 files changed
+300
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 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 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
0 commit comments