当前位置: 首页 > article >正文

Leetcode 整数转罗马数字

在这里插入图片描述

这段代码的算法思想是基于罗马数字的减法规则,将整数转换为罗马数字的字符串表示。下面是详细的解释:

算法步骤:

  1. 定义数值和符号对应关系:代码中定义了两个数组:valuessymbolsvalues 数组包含了罗马数字的数值,按从大到小的顺序排列;symbols 数组包含了与这些数值对应的罗马数字符号。比如,1000 对应 “M”,900 对应 “CM”,依此类推。

    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"};
    
  2. 初始化结果:使用 StringBuilder 对象 roman 来存储结果字符串,最终得到罗马数字的表示形式。

    StringBuilder roman = new StringBuilder();
    
  3. 循环匹配数值:使用一个 for 循环遍历 values 数组中的每个数值。对于每个数值 values[i],我们通过 while 循环检查当前的数字 num 是否大于等于 values[i]

    • 如果 num >= values[i],说明 num 中包含了 values[i] 所代表的罗马数字部分。
    • while 循环中,我们将 values[i]num 中减去,并将对应的罗马数字符号 symbols[i] 添加到 roman 中。
    • 这样做的目的是确保将大的数值优先匹配完毕,从而符合罗马数字的书写规则。
    for (int i = 0; i < values.length && num > 0; i++) {
        while (num >= values[i]) {
            num -= values[i];
            roman.append(symbols[i]);
        }
    }
    
  4. 结束条件:当 num 被减到零时,说明所有的数值都已经转换为罗马数字表示。此时,我们退出循环。

  5. 返回结果:将 StringBuilder 对象 roman 转换为字符串并返回,得到最终的罗马数字表示。

    return roman.toString();
    

算法思想总结:

该算法采用贪心策略,即每次从最大的数值开始匹配并减去,直到 num
为零。因为罗马数字规则要求从高位到低位的排列,所以按照从大到小的顺序进行匹配和减法操作可以保证最终结果符合罗马数字的标准格式。

同时,这种方法避免了复杂的判断逻辑,是一种高效的解决方案。

通过这种方式,我们可以将整数逐步转换为符合规则的罗马数字字符串。

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 roman = new StringBuilder();
        
        for(int i = 0; i < values.length && num > 0; i++) {
            while(num >= values[i]) {
                num -= values[i];
                roman.append(symbols[i]);
            }
        }

        return roman.toString();
    }
}

http://www.kler.cn/a/395152.html

相关文章:

  • RabbitMQ 篇-深入了解延迟消息、MQ 可靠性(生产者可靠性、MQ 可靠性、消费者可靠性)
  • 通过MongoDB Atlas 实现语义搜索与 RAG——迈向AI的搜索机制
  • 第四十五章 Vue之Vuex模块化创建(module)
  • 网络基础概念与应用:深入理解计算机网络
  • 群控系统服务端开发模式-应用开发-前端个人信息功能
  • ❤React-React 组件基础(类组件)
  • webpack5 + vue3 从零配置项目
  • 低代码集成多方API的简单实现
  • 力扣113:路径总和II
  • 蓝领招聘二期笔记
  • 标题:网络安全:数字时代的守护盾
  • Python基础学习-07不可重复的set集合
  • 10款音频剪辑工具的个人实践体验感受!!
  • PG实例CPU使用率高排查思路
  • pyflink datastream数据流ds经过一系列转换后转为table,t_env.from_data_stream(ds)
  • 【C++学习(35)】在Linux中基于ucontext实现C++实现协程(Coroutine),基于C++20的co_await 协程的关键字实现协程
  • 机器学习在网络安全中的应用
  • 问:SQL优化,七条实践总结?
  • Rust枚举之卧龙凤雏(Rust Option枚举、Rust Result枚举)(Rust Enum、Some(T)、Ok(T)、Err(E))链式操作
  • TKinter实现与Dash应用的同步启停控制
  • kubernetes简单入门实战
  • 【大语言模型】ACL2024论文-10 CSCD-IME: 纠正拼音输入法产生的拼写错误
  • MathGPT的原理介绍,在中小学数学教学的应用场景,以及代码样例实现
  • Leetcode:3258. 统计满足 K 约束的子字符串数量 I
  • 什么是CRM系统?
  • 华为eNSP:RSTP