Solve integer-to-roman.
This commit is contained in:
parent
61dcce1a76
commit
2847166137
|
@ -0,0 +1,31 @@
|
||||||
|
pub fn int_to_roman(number: i32) -> String {
|
||||||
|
let mut result = String::new();
|
||||||
|
|
||||||
|
for (index, digit) in number.to_string().chars().rev().enumerate() {
|
||||||
|
if digit == '0' {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
let digit = digit.to_digit(10).unwrap() as usize;
|
||||||
|
let magnitude = 10_usize.pow(index as u32);
|
||||||
|
|
||||||
|
let (unit_1, unit_5, unit_10) = match magnitude {
|
||||||
|
1 => ("I", "V", "X"),
|
||||||
|
10 => ("X", "L", "C"),
|
||||||
|
100 => ("C", "D", "M"),
|
||||||
|
1000 => ("M", "", ""),
|
||||||
|
_ => ("", "", ""),
|
||||||
|
};
|
||||||
|
|
||||||
|
result += &match digit {
|
||||||
|
1..=3 => unit_1.repeat(digit),
|
||||||
|
4 => format!("{unit_5}{unit_1}"),
|
||||||
|
5 => unit_5.to_string(),
|
||||||
|
6..=8 => format!("{}{unit_5}", unit_1.repeat(digit - 5)),
|
||||||
|
9 => format!("{unit_10}{unit_1}"),
|
||||||
|
_ => continue,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result.chars().rev().collect()
|
||||||
|
}
|
|
@ -2,6 +2,7 @@ pub mod add_binary;
|
||||||
pub mod excel_sheet_column_number;
|
pub mod excel_sheet_column_number;
|
||||||
pub mod excel_sheet_column_title;
|
pub mod excel_sheet_column_title;
|
||||||
pub mod implement_strstr;
|
pub mod implement_strstr;
|
||||||
|
pub mod integer_to_roman;
|
||||||
pub mod isomorphic_strings;
|
pub mod isomorphic_strings;
|
||||||
pub mod length_of_last_word;
|
pub mod length_of_last_word;
|
||||||
pub mod longest_common_prefix;
|
pub mod longest_common_prefix;
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
use leetcode::integer_to_roman::int_to_roman;
|
||||||
|
|
||||||
|
use test_case::test_case;
|
||||||
|
|
||||||
|
#[test_case(0, ""; "minimum")]
|
||||||
|
#[test_case(3999, "MMMCMXCIX"; "maximum")]
|
||||||
|
#[test_case(1666, "MDCLXVI"; "every character")]
|
||||||
|
#[test_case(900, "CM"; "with subtracting")]
|
||||||
|
#[test_case(20, "XX"; "without subtracting")]
|
||||||
|
fn test_integer_to_roman(input: i32, expected: &str) {
|
||||||
|
assert_eq!(int_to_roman(input), expected);
|
||||||
|
}
|
Loading…
Reference in New Issue