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

2024-03-13 01:44

本文主要是介绍力扣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();}
}

这篇关于力扣L9--- 12. 整数转罗马数字--2024年3月12日的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/803270

相关文章

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

PTA求一批整数中出现最多的个位数字

作者 徐镜春 单位 浙江大学 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

2024/9/8 c++ smart

1.通过自己编写的class来实现unique_ptr指针的功能 #include <iostream> using namespace std; template<class T> class unique_ptr { public:         //无参构造函数         unique_ptr();         //有参构造函数         unique_ptr(

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快