题目描述(中等难度)
把数字转换成罗马数字,正常情况就是把每个字母相加,并且大字母在前,小字母在后,上边也介绍了像 4 和 9 那些特殊情况。
解法一
这个是自己的解法,主要思想就是每次取出一位,然后得到相应的罗马数字,然后合起来就行。
时间复杂度:num 的位数
所以时间复杂度是 O(log(n))。
空间复杂度:常数个变量,O(1)。
解法二
https://leetcode.com/problems/integer-to-roman/discuss/6310/My-java-solution-easy-to-understand
相当简洁了,主要就是把所有的组合列出来,因为罗马数字表示的大小就是把所有字母相加,所以每次 append 那个,再把对应的值减去就行了。
时间复杂度:不是很清楚,也许是 O(1)?因为似乎和问题规模没什么关系了。
空间复杂度:O(1).
解法三
https://leetcode.com/problems/integer-to-roman/discuss/6376/Simple-JAVA-solution
这就更加暴力了,把每位的情况都列出来然后直接返回,但思路清晰明了呀。
空间复杂度:O(1)。
总
这道题感觉难度应该是 easy ,没有那么难,就是理清楚题意,然后就可以往出列举就行了。
添加好友一起进步~
如果觉得有帮助的话,可以点击 这里 给一个 star 哦 ^^
如果想系统的学习数据结构和算法,强烈推荐一个我之前学过的课程,可以点击 查看详情