leetcode第12题

简介: 相当简洁了,主要就是把所有的组合列出来,因为罗马数字表示的大小就是把所有字母相加,所以每次 append 那个,再把对应的值减去就行了。时间复杂度:不是很清楚,也许是 O(1)?因为似乎和问题规模没什么关系了。空间复杂度:O(1)

image.png

top12

把数字转换成罗马数字,正常情况就是把每个字母相加,并且大字母在前,小字母在后,上边也介绍了像 4 和 9 那些特殊情况。

解法一

这个是自己的解法,主要思想就是每次取出一位,然后得到相应的罗马数字,然后合起来就行。

publicStringgetRoman(intnum,intcount){ //count 表示当前的位数,个位,十位...char[]ten={'I','X','C','M'}; //1,10,100,1000char[]five={'V','L','D'};//5,50,500Stringr="";
if(num<=3){
while(num!=0){
r+=ten[count];
num--;
        }
    }
if(num==4){
r=(ten[count]+"")+(five[count]+"");
    }
if(num==5){
r=five[count]+"";
    }
if(num>5&&num<9){
r=five[count]+"";
num-=5;
while(num!=0){
r+=ten[count];
num--;
        }
    }
if(num==9){
r= (ten[count] +"") + (ten[count+1] +"");
    }
returnr;
}
publicStringintToRoman(intnum) {
Stringr="";
intcount=0;
while(num!=0){
intpop=num%10;
r=getRoman(pop,count)+r;
count++;
num/=10;
    }
returnr;
}

时间复杂度:num 的位数 log_{10}(num)+1log10(num)+1所以时间复杂度是 O(log(n))。

空间复杂度:常数个变量,O(1)。

下边在分享一些 LeetCode 讨论里的一些解法。

解法二

https://leetcode.com/problems/integer-to-roman/discuss/6310/My-java-solution-easy-to-understand

publicStringintToRoman(intnum) {
int[] values= {1000,900,500,400,100,90,50,40,10,9,5,4,1};
String[] strs= {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
StringBuildersb=newStringBuilder();
for(inti=0;i<values.length;i++) {
while(num>=values[i]) {
num-=values[i];
sb.append(strs[i]);
        }
    }
returnsb.toString();
}

相当简洁了,主要就是把所有的组合列出来,因为罗马数字表示的大小就是把所有字母相加,所以每次 append 那个,再把对应的值减去就行了。

时间复杂度:不是很清楚,也许是 O(1)?因为似乎和问题规模没什么关系了。

空间复杂度:O(1).


这道题感觉难度应该是 easy ,没有那么难,就是理清楚题意,然后就可以往出列举就行了。

相关文章
|
消息中间件 负载均衡 监控
【面试问题】RabbitMQ 的集群
【1月更文挑战第27天】【面试问题】RabbitMQ 的集群
|
9月前
|
数据采集 缓存 搜索推荐
NewsNow:开源个性化新闻聚合平台
NewsNow是一个功能强大且易于上手的新闻聚合项目,通过简单的部署步骤,你就可以拥有一个属于自己的个性化新闻聚合平台。无论是学习TypeScript、了解Web开发,还是打造专属的新闻阅读工具,NewsNow都是一个不错的选择。
620 2
NewsNow:开源个性化新闻聚合平台
教育技术工具盘点:五大免费软件助力教师信息化
随着科技的发展,学校在管理、教学等方面逐步引入信息技术,提升教师专业技能。本文推荐了几款实用的教育技术工具,如草料二维码、101教育PPT、格式工厂、小猿口算和万彩动画大师,以提高教学效率。草料二维码适用于教学资源电子化、信息收集等工作,101教育PPT则提供丰富的PPT资源,方便教师备课和互动教学。其他工具也各具特色,助力教学创新。
593 10
教育技术工具盘点:五大免费软件助力教师信息化
|
SQL 关系型数据库 MySQL
Mysql中from多表跟join表的区别
Mysql中from多表跟join表的区别
1020 0
|
关系型数据库 MySQL Linux
|
测试技术
正则表达式
正则表达式
175 1
|
前端开发
基于RuoYi-Flowable-Plus的若依ruoyi-nbcio支持自定义业务表单流程的集成方法与步骤(二)
基于RuoYi-Flowable-Plus的若依ruoyi-nbcio支持自定义业务表单流程的集成方法与步骤(二)
917 0
|
Android开发
自己对Handler和HandlerThread的理解
自己对Handler和HandlerThread的理解
93 0
|
Linux 网络架构
Linux 路由表解密:详解路由表的构成与作用
Linux 路由表解密:详解路由表的构成与作用
2734 0
|
XML 数据可视化 Java
Android开发Jetpack从入门到精通教程
前言 即学即用Android Jetpack系列Blog的目的是通过学习Android Jetpack完成一个简单的Demo,本文是即学即用Android Jetpack系列Blog的第一篇。
Android开发Jetpack从入门到精通教程