ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

千问 LeetCode 12.整数转罗马数字 Rust实现

千问    LeetCode 12.整数转罗马数字 Rust实现 LeetCode 12. 整数转罗马数字的核心思路是贪心算法从大到小依次匹配罗马数字符号每次尽可能多地使用当前最大的符号。核心思路1. 将所有可能的罗马数字符号包括 4、9、40、90 等特殊组合按值从大到小排列2. 遍历符号表只要当前数值 ≥ 符号对应的值就将其拼入结果并减去对应值3. 直到数值归零Rust 完整实现解法一贪心 符号表推荐impl Solution {pub fn int_to_roman(mut num: i32) - String {let symbols [(M, 1000), (CM, 900), (D, 500), (CD, 400),(C, 100), (XC, 90), (L, 50), (XL, 40),(X, 10), (IX, 9), (V, 5), (IV, 4),(I, 1),];let mut result String::new();for (symbol, value) in symbols {while num value {result.push_str(symbol);num - value;}}result}}解法二按位打表查表法impl Solution {pub fn int_to_roman(num: i32) - String {const THOUSANDS: [str; 4] [, M, MM, MMM];const HUNDREDS: [str; 10] [, C, CC, CCC, CD, D, DC, DCC, DCCC, CM,];const TENS: [str; 10] [, X, XX, XXX, XL, L, LX, LXX, LXXX, XC,];const ONES: [str; 10] [, I, II, III, IV, V, VI, VII, VIII, IX,];let n num as usize;let mut result String::new();result.push_str(THOUSANDS[n / 1000]);result.push_str(HUNDREDS[(n % 1000) / 100]);result.push_str(TENS[(n % 100) / 10]);result.push_str(ONES[n % 10]);result}}两种解法对比项目 贪心法 打表法时间复杂度 O(1)最多循环 15 次 O(1)纯查表拼接空间复杂度 O(1) O(1)可读性 ⭐⭐⭐ 逻辑清晰易于理解 ⭐⭐⭐ 直观但表较长扩展性 好改符号表即可 一般需要增加新的表关键细节- 特殊组合要提前放入符号表把 CM(900)、CD(400)、XC(90)、XL(40)、IX(9)、IV(4) 作为独立单元加入贪心匹配时自然能正确处理减法规则无需额外判断- num 必须声明为 mut循环中需要不断减去已匹配的值- push_str 而非 pushsymbol 是 str需要用 push_str 追加字符串切片- 题目保证 1 ≤ num ≤ 3999无需处理越界情况两种解法都是 O(1) 复杂度面试中贪心法更通用、更好讲思路打表法则胜在简洁直接。反过来整数转罗马数字的逆题——罗马数字转整数要不要也用 Rust 写一遍
返回列表