力扣L9--- 12. 整数转罗马数字--2024年3月12日

1.题目

在这里插入图片描述

2.知识点

(1)HaspMap的一些基本语法
1)创建 HashMap,用于存储键为 String 类型、值为 Integer 类型的键值对。

HashMap<String, Integer> map = new HashMap<>();

2)添加键值对:

map.put("apple", 5);
map.put("banana", 10);
map.put("orange", 8);

3)获取值

int count = map.get("apple");
System.out.println("Number of apples: " + count);
//运行结果Number of apples: 5

4)检查键是否存在

if (map.containsKey("banana")) {System.out.println("We have bananas!");
}

5)遍历 HashMap:

for (String key : map.keySet()) {int value = map.get(key);System.out.println(key + ": " + value);
}

6)
除了 String 和 Character,HashMap 的键的类型还可以是任何其他的引用类型,例如:

A整数类型:HashMap<Integer, String>,其中键是整数,值是字符串。

HashMap<Integer, String> map = new HashMap<>();
map.put(1, "One");
map.put(2, "Two");
map.put(3, "Three");

B自定义类:HashMap<MyClass, Double>,其中键是自定义类 MyClass 的对象,值是双精度浮点数。

class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}// 省略 getter 和 setter 方法
}HashMap<Person, String> map = new HashMap<>();
Person person1 = new Person("Alice", 30);
Person person2 = new Person("Bob", 25);
map.put(person1, "Manager");
map.put(person2, "Engineer");

C枚举类型:HashMap<DayOfWeek, String>,其中键是枚举类型 DayOfWeek 的值,值是字符串。

enum DayOfWeek {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}HashMap<DayOfWeek, String> map = new HashMap<>();
map.put(DayOfWeek.MONDAY, "Monday");
map.put(DayOfWeek.TUESDAY, "Tuesday");
map.put(DayOfWeek.WEDNESDAY, "Wednesday");

(2)StringBuilder用于处理字符串的可变对象


StringBuilderJava 中的一个类,用于处理字符串的可变对象。与普通的字符串对象(如 String)不同,StringBuilder 允许我们在不创建新的对象的情况下修改字符串的内容,这样可以提高字符串操作的效率。在这个上下文中,StringBuilder sb = new StringBuilder(); 创建了一个新的 StringBuilder 对象,用于存储罗马数字的字符串表示。在后续的循环中,我们会不断地向 sb 中追加不同的罗马数字字符,最终得到整数对应的罗马数字表示。通过使用 StringBuilder,我们可以高效地构建最终的字符串表示,而不必每次都创建新的字符串对象。

(3)
sb.toString() 是 StringBuilder 类的一个方法用于将 StringBuilder 对象中的内容转换为一个普通的字符串。在这个上下文中,sb.toString() 将会返回一个包含了整数对应的罗马数字表示的字符串。这个方法通常用于在需要一个普通字符串的地方使用 StringBuilder 构建的字符串
1)toString() 是 Java 中常见的方法,用于将对象转换为字符串表示。这个方法通常用于打印对象内容或者将对象转换为字符串类型的变量。
(4)’ ’ 用于表示字符,而双引号 " " 用于表示字符串。
在Java中,char 是用于表示单个字符的数据类型,而 String 是用于表示字符串的类。char 类型使用单引号 ’ ',例如 ‘A’,而 String 类型使用双引号 " ",例如 “Hello”。

Integer number = 42;
String str = number.toString();
System.out.println(str);
//这段代码将会打印出整数 42 的字符串表示。

2)对于自定义的类,如果没有重写 toString() 方法,默认会使用 Object 类的 toString() 方法,为了更好地表示对象的内容,可以重写 toString() 方法,返回自定义的字符串表示。

class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Person{name='" + name + "', age=" + age + "}";}
}
Person person = new Person("Alice", 30);
String str = person.toString();
System.out.println(str);
//这会打印出类似于 Person{name='Alice', age=30} 的字符串。

(4)append 是 StringBuilder 类的方法,用于向 StringBuilder 对象的末尾追加字符串、字符或其他数据。

StringBuilder sb = new StringBuilder();
sb.append("Hello, ");
sb.append("world!");
System.out.println(sb.toString()); // 输出 "Hello, world!"
StringBuilder sb = new StringBuilder();
sb.append('A');
sb.append('B');
System.out.println(sb.toString()); // 输出 "AB"
StringBuilder sb = new StringBuilder();
sb.append(42);
sb.append(3.14);
System.out.println(sb.toString()); // 输出 "423.14"
StringBuilder sb = new StringBuilder();
String str = "world";
sb.append("Hello, ").append(str, 0, 3); // 从字符串 str 的索引 0 处开始,追加长度为 3 的部分字符串
System.out.println(sb.toString()); // 输出 "Hello, wor"

3.思路与例子

将左小右大的情况列举出来,然后还有其他情况枚举一下
左大右小的直接用上面列举的 做一下加法组合
(1)for (int i = 0; i < units.length; i++) {:这是一个 for 循环,用于遍历 units 数组中的每个元素,units 数组包含了所有可能用到的基本罗马数字的值,按照从大到小的顺序排列。

(2)while (num >= units[i]) {:这是一个 while 循环,用于判断当前整数 num 是否大于等于当前基本罗马数字 units[i] 的值。如果是,则说明需要将该基本罗马数字表示的字符添加到最终结果中。

(3)sb.append(m.get(units[i]));:如果 num 大于等于 units[i],则将对应的罗马数字字符添加到 StringBuilder sb 中。通过 m.get(units[i]) 可以从 HashMap m 中获取 units[i] 对应的罗马数字字符。

(4)num -= units[i];:将 num 减去 units[i],表示当前整数已经被转换成了对应的罗马数字字符,需要继续处理剩余的部分。

(5)return sb.toString():通过 toString() 方法将其转换为字符串并返回。

4.代码实现

import java.util.HashMap;
class Solution {public String intToRoman(int num) {HashMap<Integer,String> m=new HashMap<>();//以下是基本罗马数字的组成情况//一般情况下 罗马字符左大右下m.put(1,"I");m.put(5,"V");m.put(10,"X");m.put(50,"L");m.put(100,"C");m.put(500,"D");m.put(1000,"M");//以下是罗马字符特殊情况左小右大m.put(4,"IV");m.put(9,"IX");m.put(40,"XL");m.put(90,"XC");m.put(400,"CD");m.put(900,"CM");StringBuilder s=new StringBuilder();int[] arr={1000,900,500,400,100,90,50,40,10,9,5,4,1};//基本罗马数字的数组for(int i=0;i<arr.length;i++){while(num>=arr[i]){s.append(m.get(arr[i]));num=num-arr[i];}}return s.toString();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/740652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DAY14二叉树迭代遍历

二叉树前序迭代法遍历 前序遍历是中左右&#xff0c;每次先处理的是中间节点&#xff0c;那么先将根节点放入栈中&#xff0c;然后将右孩子加入栈&#xff0c;再加入左孩子。 为什么要先加入 右孩子&#xff0c;再加入左孩子呢&#xff1f; 因为这样出栈的时候才是中左右的顺…

刷题日记——01字符串、非素数个数(厦门大学机试)

题目1——01字符串 分析 经过拆解找规律&#xff0c;发现是两个斐波那契 那么代码就好写了呀 #include <stdio.h>unsigned long long f(int n){if(n0||n1){return n;}return (f(n-1)f(n-2))%2333333; }int main(){int n;scanf("%d",&n);printf("%…

2.Datax数据同步之Windows下,mysql和sqlserver之间的自定义sql文数据同步

目录 前言步骤操作大纲步骤明细mysql 至 sqlServersqlServer 至 mysql执行同步语句中报 前言 上一篇文章实现了不同的mysql数据库之间的数据同步&#xff0c;在此基础上本篇将实现mysql和sqlserver之间的自定义sql文数据同步 准备工作&#xff1a; JDK(1.8以上&#xff0c;推…

亲测抖音小程序备案流程,抖音小程序如何备案,抖音小程序备案所需准备资料

抖音小程序为什么要备案&#xff0c;抖音官方给出如下说明&#xff1a; 1、2024年3月15日后提交备案的小程序将不保证2024年3月31日前平台可初审通过&#xff1b; 2、2024年3月31日后未完成备案小程序将被下架处理。 一&#xff0c;备案前需准备资料 &#xff08;一&#xff0…

BUUCTF-----[SWPU2019]Web1

打开页面&#xff0c;原本以为是二次注入,结果不是&#xff0c;先注册一个账户 在申请发布广告中&#xff0c;发现反射性xss(然而没有什么用) 在广告申请名字中发现注入点 开始注入 通过一系列的测试&#xff0c;发现系统过滤了#&#xff0c;or&#xff0c;空格 orde…

《Fallacies of Distributed Systems》原文手译

Fallacies of Distributed Systems 分布式系统的谬误 Fallacies of distributed systems are a set of assertions made by L Peter Deutsch and others at Sun Microsystems describing false assumptions that programmers new to distributed applications invariably mak…

操作系统--LRU算法,手撕

今天研究一下LRU算法&#xff0c;上学期学数据结构的时候就应该学一下这个算法&#xff0c;不过后面操作系统也会讲到LRU算法 题目 LRU缓存leetocde146 LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;算法是一种常见的缓存替换算法&#xff0c;通…

windows系统图标变白设置

我们在使用系统的时候&#xff0c;通常会在桌面创建图标&#xff0c;有时候桌面图标过多&#xff0c;整理图标放在新建文件夹的时候&#xff0c;图标变白&#xff0c;通常情况下都是缓存问题&#xff0c;这里也是删除缓存解决演示系统&#xff1a;windows11 1显示图标缓存目录 …

保护数字前沿:有效的威胁暴露管理

人工智能技术正在从根本上改变网络安全领域的方向。仅 2023 年&#xff0c;全球企业预计将在人工智能上花费 1027.8 亿美元&#xff0c;以阻止网络安全威胁。 人工智能 (AI)在增强网络安全措施方面发挥着关键作用&#xff0c;因为它能够快速分析大量数据并识别可能表明潜在威胁…

Unity 显示MeshRenderer的渲染层级

Unity 显示MeshRenderer的渲染层级 前言源码MeshRendererInspectorSkinnedMeshRendererInspector 参考 前言 Mesh Renderer和Skinned Mesh Renderer组件默认不显示Order&#xff0c;找了个工具显示一下。 源码 下面两个代码放入Editor文件夹中 MeshRendererInspector Me…

C++Qt学习——不用UI文件编程

在创建文件的时候不要选中Generate form这块 创建的文件如下图所示&#xff0c;比起之前的没有了form这一快 1、在mainwindow.h里面声明按钮对象 2、在mainwindow.cpp里实例化按钮 2.1、方法一 pushButton new QPushButton();pushButton->show(); 但是发现显示是分离的 2…

【spring】-多模块构建二-问题整理

1、bean注入问题 The injection point has the following annotations: - org.springframework.beans.factory.annotation.Autowired(requiredtrue) 解决1&#xff1a; 由于引入的bean类 不属于启动类的子模块下&#xff0c;需要在启动类手动声明扫描的类 也适用于公共子模…

【图文详解】Maven Helper插件解决Maven冲突

文章目录 插件问题解决过程 在面试中解决问题的能力和思路是考察的重点&#xff0c;面试官问会问我们有没有解决过maven冲突。以下造了一个maven冲突&#xff0c;手把手教学如何解决Maven冲突。 插件 插件在idea插件中搜索Maven Helper 问题 解决过程 根据上面日志知道是log…

2024 遗传编程实战(一)基因实战

2024 遗传编程实战&#xff08;一&#xff09;基因实战 文章目录 2024 遗传编程实战&#xff08;一&#xff09;基因实战一、遗传编程实战介绍1、遗传编程简介2、遗传编程和进化论的关系3、遗传编程过程解释 二、基于遗传编程的例子1、实战题目介绍2、遗传算法的伪代码3、遗传实…

微信小程序开发系列(三十)·小程序本地存储API·同步和异步的区别

目录 1. 同步API 1.1 getStorageSync存储API 1.2 removeStorageSync获取数据API 1.3 removeStorageSync删除 1.4 clearStorageSync清空 2. 异步API 2.1 setStorage存储API 2.2 getStorage获取数据API 2.3 removeStorage删除API 2.4 clearStorage清空 3. …

Zookeeper搭建

目录 前言 初了解Zookeeper 搭建 准备 配置Zookeeper 前言 今天来介绍Zookeeper的搭建&#xff0c;其实Zookeeper的搭建很简单&#xff0c;但是为什么还要单独整一节呢&#xff0c;这就不得不先了解Zookeeper有什么功能了&#xff01;而且现在很火的框架也离不开Zookeepe…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的夜间车辆检测系统(深度学习代码+UI界面+训练数据集)

摘要&#xff1a;开发夜间车辆检测系统对于自动驾驶技术具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个夜间车辆检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同模型间…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的木材表面缺陷检测系统(深度学习+Python代码+UI界面+训练数据集)

摘要&#xff1a;开发高效的木材表面缺陷检测系统对于提升木材加工行业的质量控制和生产效率至关重要。本篇博客详细介绍了如何运用深度学习技术构建一个木材表面缺陷检测系统&#xff0c;并提供了完整的实现代码。该系统采用了强大的YOLOv8算法&#xff0c;并对YOLOv7、YOLOv6…

VUE_nuxt启动只能通过localhost访问,ip访问不到:问题解决

修改项目根目录下的 package.json "config": {"nuxt": {"host": "0.0.0.0","port": "3000"} } 这样项目启动后就可以通过ip进行访问了

保研复习数据结构记(7)--散列查找(哈希表)

哈希表有什么特点&#xff1f;数据元素的关键字与其存储地址直接相关&#xff08;通过哈希函数相关&#xff09;&#xff0c;典型的用空间换时间的算法处理冲突的方法&#xff1f;拉链法&#xff08;链地址法&#xff09;&#xff0c;开放定址法&#xff0c;再散列法什么是查找…